TableViewCell 滑动动作中的图像

Image in TableViewCell swipe action

我有一个滑动动作可以'complete'我的待办事项列表应用程序中的任务。这是我设置的图片:

然而当滑动单元格时,图像看起来像这样:

有没有办法让背景transparent/white和图片像上图一样有绿色圆圈?

如果没有,有没有办法让单元格的绿色背景'wrap'变成紫色,这样就没有空格了? 谢谢!

在第二张图片中,绿色是 UIContextualAction 的 backgroundColor,白色是 tintColor

图像被视为模板图像——也就是说,它的颜色被忽略,而是在图像透明的地方绘制成透明的,在图像不透明的地方绘制成不透明的tintColor

因此,基本上您需要反转设置:将背景颜色设置为白色,并将色调颜色更改为图像中显示的深绿色。设置色调颜色并不容易,但是您可以按照建议 here 在您的应用委托 didFinishLaunching 中使用外观代理来做到这一点(尽管这可能会产生其他不需要的副作用):

UIImageView.appearance(
    whenContainedInInstancesOf: [UITableView.self])
        .tintColor = // whatever that green is

为 UIImage 提出了这个扩展:

    extension UIImage {
        func colored(in color: UIColor) -> UIImage {
            let renderer = UIGraphicsImageRenderer(size: size)
            return renderer.image { context in
                color.set()
                self.withRenderingMode(.alwaysTemplate).draw(in: CGRect(origin: .zero, size: size))
            }
        }
    }

它 returns 一个新图标,使用时会变成新颜色:

        swipAction.image = UIImage(named: "myImage")?.colored(in: .white)

也许这对某人有帮助。

在iOS13中使用SF Symbol,只需使用UIImageRenderingModeAlwaysOriginal改变符号颜色即可。

replyAction.image = [[UIImage systemImageNamed: @"arrowshape.turn.up.left.circle.fill"] imageWithTintColor: self.view.tintColor renderingMode: UIImageRenderingModeAlwaysOriginal];