4

我正在尝试实现一个新的 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 渲染模式。在任何一种情况下,图像都会正确显示在调试器中:在此处输入图像描述

但未能出现在模拟器中(“这里没有”标记我希望图像出现的地方): 在此处输入图像描述

难道我做错了什么?

4

4 回答 4

1

老问题,

但是对于那些仍在尝试解决此问题的人,请确保您的图像大小与您的单元格大小相同或更小

就我而言,我的图像太大,只显示白色背景

于 2019-08-22T09:23:04.943 回答
0

我有同样的问题,几天来一直在尝试解决这个问题。尚未在任何地方找到解决方案。

一种已弃用的解决方法是将 backgroundColor 构造为 patternImage ,如下所示:

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!)
于 2018-06-28T14:51:37.427 回答
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])
        }

图片示例:

图片示例

于 2018-12-25T15:41:41.980 回答
0

这在 iOS 13.4、Swift 4.2、Xcode 11.4 中对我有用

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

那条线导致了这个——它在暗模式和亮模式下工作。

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

在此处输入图像描述

于 2020-03-28T15:24:57.293 回答