4

有几个类似的问题(例如我以前的 iOS10 变体),但我认为应该有一个最新的 iOS 11 答案,使用 Swift4,不使用私有 API,并且不依赖您将图标限制为 unicode 表情符号。

随着 API 到 iOS11 的演变,我们现在可以放置图像和文本,但它们被强制进入模板模式并使用您设置的任何 backgroundColor 反转颜色。例如

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])

产生这个:

在此处输入图像描述

显然,我们可以有图像或文本,但不能两者兼而有之。

但我想要的样子是

在此处输入图像描述

除了倒序之外,我不知道如何像 iOS10 那样欺骗系统。我仍然可以生成带有文本和图像的图像,但我无法控制该图像的颜色。将 backgroundColor 设置为 nil 或 .clear 只会产生空方块。

4

1 回答 1

4

使用 patternImage 设置背景颜色,不要设置标题或图像。这是一个 hacky 技巧,但它应该适用于您的情况。

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

你必须用最左边的图标来保存你的图像,这样它们就不会重复:

在此处输入图像描述

注意:我对此进行了测试,它在使用两个或多个上下文操作时有效,但仅对一个无效。该模式最终会在完全滑动时重复。

这还假设您在 tableview 后面有一个纯背景,您可以将其用作图像的背景颜色,因为透明度仍然是不行的。

于 2017-11-20T22:14:18.583 回答