我想用原始图像颜色的图像在.trailingSwipeActionsConfigurationForRowAt
中创建动作。默认情况下,所有图像变为白色。在我的图像中,几乎没有颜色,所以我想保留所有颜色,因此不能只为它们着色。我正在尝试使用.withRenderingMode(.alwaysOriginal)
,但它似乎根本不起作用-图像仍然变成白色,我尝试了pdf和png,都一样。
这是我的代码:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let isOn = UIContextualAction(style: .normal, title: "", handler: { _, _, completionHandler in
completionHandler(true)
})
isOn.backgroundColor = UIColor(red: 183/255, green: 189/255, blue: 196/255, alpha: 1)
isOn.image = UIImage(named: "SwitchOn")?.withRenderingMode(.alwaysOriginal)
return UISwipeActionsConfiguration(actions: [isOn])
}
有什么办法可以使它工作?
UPD:
我发现只有一种解决方法-使用.backgroundColor = UIColor(patternImage: theImage)
而不是.image
。
但是,如果您要像我最后一样使用此技巧,请注意,您将需要创建一个高度与单元格高度完全相同的图像,并在图像的右侧具有扩展的色域。这将有助于防止图像在屏幕区域上重复出现。并且,文本标题也会出现(使用.image
时会隐藏),因此,如果不需要它,只需在其中输入一个空字符串即可。
代码示例:
let theImage: UIImage? = UIImage(named:"MyImage")
action.backgroundColor = UIColor(patternImage: theImage!)
图片示例: