trailingSwipeActionsConfigurationForRowAt中的图像似乎不起作用

时间:2017-11-20 16:51:18

标签: ios uiswipeactionsconfiguration

我正在尝试实施新的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渲染模式。在任何一种情况下,图像都在调试器中正确显示:enter image description here

但未能在模拟器中显示(“Nothing here”标记了我希望图像显示的位置): enter image description here

我做错了吗?

4 个答案:

答案 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])
        }

图片示例:

Image example

答案 3 :(得分:0)

这是在iOS 13.4,Swift 4.2,Xcode 11.4中对我有用的

let deleteActionImage = UIImage(systemName: "trash.fill")?.withTintColor(UIColor.systemRed, renderingMode: .alwaysOriginal)

该行导致了这一结果-并且它可以在暗模式和亮模式下工作。

在照片中:左侧是我的单元格,右侧是红色的垃圾按钮

enter image description here