1

そこには同様の質問がいくつかありますが(例えばmy previous iOS10 variant)、Swift4を使ってiOS 11の最新の回答があるはずですプライベートAPIを使用し、あなたのアイコンをユニコードの絵文字に限定することには依存しません。アイコンとテキストを含むUISwipeActionsConfiguration/UIContextualActionと背景をクリア

iOS11へのAPIの進化により、画像とテキストを追加できるようになりましたが、テンプレートモードに強制され、設定した背景色で反転されます。例えば。これを生産する

let rename = UIContextualAction(style: .normal, title: "Rename") { (_, view, _) in 
    self.renameEntry(indexPath) 
} 
rename.backgroundColor = UIColor.black 
rename.image = UIImage(named: "pencilEdit") 
let locate = UIContextualAction(style: .normal, title: "Locate") { (_, view, _) in 
    self.locateEntry(indexPath) 
} 
locate.backgroundColor = UIColor.blue 
locate.image = UIImage(named: "locatePin") 
let delete = UIContextualAction(style: .destructive, title: "Forget") { (_, view, _) in 
    self.deleteEntry(indexPath) 
} 
delete.backgroundColor = UIColor.red 
delete.image = UIImage(named: "triggerDeleteSelector") 
return UISwipeActionsConfiguration(actions: [rename, locate, delete]) 

enter image description here

だから、明らかに、我々は、画像やテキストではなく、両方を持つことができます。

しかし、私が欲しいの外観は

別に

enter image description here

ある後方順から、私はiOS10のためにできたように、システムをだますためにどのように途方に暮れてよ。私はまだテキストと画像の両方で画像を生成することができますが、その画像の色を制御することはできません。 backgroundColorをnilまたは.clearに設定すると、空の四角形が作成されます。

答えて

1

patternImageを使用して背景色を設定し、タイトルや画像を設定しないでください。これはハックトリックですが、それはあなたの状況のた​​めに動作するはずです。

let rename = UIContextualAction(style: .normal, title: nil) { (_, view, _) in 
     self.renameEntry(indexPath) 
} 
rename.backgroundColor = UIColor(patternImage: UIImage(named: "pencilEditWideFrame")!) 

あなたは、彼らが実際に繰り返さないように、左端にあるアイコンで、このように幅の広いフレームを使用して画像を保存する必要があります。

enter image description here

注:私はこれをテストし、それが動作します2つ以上のコンテキストアクションを使用しているが、ただ1つでは動作しない場合。完全なスワイプでパターンが繰り返されます。

これは、透明度がまだないため、画像の背景色に使用できるプレーンバックグラウンドがテーブルビューの背後にあることを前提としています。

+0

古い 'UITableViewRowAction'と私の以前の投稿を使用すると面白いですが、背景色としてpatternImageを使用するとランタイムコンソール警告が表示されます。しかし、新しいクラスのためのそのような警告はありません。 –

関連する問題