.withRenderingMode(.alwaysOriginal)不适用于UITableView中的图像TrailingSwipeActionsConfigurationForRowAt操作

时间:2018-12-25 16:00:54

标签: swift xcode uitableview swipe uiswipeactionsconfiguration

我想用原始图像颜色的图像在.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!)

图片示例:

Image example

0 个答案:

没有答案