2

我有一个滑动操作来“完成”我的待办事项列表应用程序中的任务。这是我设置的图像:

在此处输入图像描述

然而,当单元格被滑动时,图像如下所示:

刷过图片

有没有办法让背景透明/白色和图像有像上图一样的绿色圆圈?

如果没有,有没有办法让绿色背景“包裹”到单元格的紫色,所以没有空格?谢谢!

4

3 回答 3

8

为 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))
            }
        }
    }

像这样使用时,它会返回一个新颜色的新图标:

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

也许这对某人有帮助。

于 2019-08-10T21:17:12.270 回答
5

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

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

所以,基本上你需要颠倒你的设置:将背景颜色设置为白色,并将色调颜色更改为图像中显示的深绿色。设置色调颜色并不容易,但您可以这样做,例如,在您的应用程序委托didFinishLaunching中使用外观代理,如此处建议(尽管这可能有其他不需要的副作用):

UIImageView.appearance(
    whenContainedInInstancesOf: [UITableView.self])
        .tintColor = // whatever that green is
于 2018-07-29T16:11:11.677 回答
0

在带有 SF Symbol 的 iOS 13 中,只需使用 UIImageRenderingModeAlwaysOriginal 来更改符号颜色。

replyAction.image = [[UIImage systemImageNamed: @"arrowshape.turn.up.left.circle.fill"] imageWithTintColor: self.view.tintColor renderingMode: UIImageRenderingModeAlwaysOriginal];
于 2020-08-22T16:25:17.677 回答