我正在尝试实施新的iOS11功能,允许您在tableview滑动操作中正式使用图像。
所以,我想出了这个:
@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let deleteAction = UIContextualAction(style: .normal, title: "", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
//whatever
success(true)
})
let theImage: UIImage? = UIImage(named:"Delete")?.withRenderingMode(.alwaysOriginal)
deleteAction.image = theImage
return UISwipeActionsConfiguration(actions: [deleteAction])
}
我有这个.png坐在我的资产目录中。 我尝试了WITH和WITHOUt渲染模式。在任何一种情况下,图像都在调试器中正确显示:
但未能在模拟器中显示(“Nothing here”标记了我希望图像显示的位置):
我做错了吗?
答案 0 :(得分:1)
老问题
但是对于仍在尝试解决此问题的用户,请确保您的图片大小小于或等于单元格大小。
对于我来说,我的图像太大,只能显示白色背景
答案 1 :(得分:0)
我有同样的问题,现在已经尝试解决了好几天。在任何地方都找不到解决方案。
一个不建议使用的解决方法是将构造为backgroundImage的backgroundColor设置如下:
let deleteAction = UIContextualAction(style: .normal, title: "", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
//whatever
success(true)
})
let theImage: UIImage? = UIImage(named:"Delete")
deleteAction.backgroundColor = UIColor(patternImage: theImage!)
答案 2 :(得分:0)
之所以发生这种情况,是因为用myAction.image
设置的图标默认情况下变成白色,而.withRenderingMode(.alwaysOriginal)
不能解决问题。此时此刻,我正在战斗同一件事-在这种情况下,渲染模式似乎根本不起作用。
我发现只有一种解决方法-使用myAction.backgroundColor = UIColor(patternImage: theImage)
而不是myAction.image
。
但是,如果您要使用此技巧-请注意,您将需要创建一个高度与单元格高度完全相同的图像,并在图像的右侧具有扩展的色域。这将有助于防止图像在屏幕区域上重复出现。而且,还会显示文本标题,因此,如果不需要它,只需在其中输入一个空字符串即可。
代码示例:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let action = UIContextualAction(style: .normal, title: "", handler: { _, _, completionHandler in
completionHandler(true)
})
let theImage: UIImage? = UIImage(named:"MyImage")
action.backgroundColor = UIColor(patternImage: theImage!)
return UISwipeActionsConfiguration(actions: [action])
}
图片示例:
答案 3 :(得分:0)