【发布时间】:2018-07-29 15:57:21
【问题描述】:
我有一个滑动操作来“完成”我的待办事项列表应用程序中的一项任务。这是我设置的图像:
但是当单元格被滑动时,图像是这样的:
有没有办法让背景透明/白色,并且图像像上图一样有绿色圆圈?
如果没有,有没有办法让绿色背景“包裹”到单元格的紫色,这样就没有空白了? 谢谢!
【问题讨论】:
标签: ios swift uitableview uiswipeactionsconfiguration
我有一个滑动操作来“完成”我的待办事项列表应用程序中的一项任务。这是我设置的图像:
但是当单元格被滑动时,图像是这样的:
有没有办法让背景透明/白色,并且图像像上图一样有绿色圆圈?
如果没有,有没有办法让绿色背景“包裹”到单元格的紫色,这样就没有空白了? 谢谢!
【问题讨论】:
标签: ios swift uitableview uiswipeactionsconfiguration
为 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)
也许这对某人有帮助。
【讨论】:
在第二张图片中,绿色是 UIContextualAction 的backgroundColor,白色是tintColor。
图像被视为模板图像 - 也就是说,它的颜色被忽略,而是在您的图像透明的地方绘制为透明的,在您的图像不透明的地方使用tintColor 绘制为不透明的。
因此,基本上您需要颠倒设置:将背景颜色设置为白色,并将色调颜色更改为图像中显示的深绿色。设置色调颜色并不容易,但您可以这样做,例如,在您的应用程序委托 didFinishLaunching 中使用外观代理,建议 here (尽管这可能有其他不需要的副作用):
UIImageView.appearance(
whenContainedInInstancesOf: [UITableView.self])
.tintColor = // whatever that green is
【讨论】:
application(_:didFinishLaunchingWithOptions:)。您不必添加它;它已经在那里了。
在带有 SF Symbol 的 iOS 13 中,只需使用 UIImageRenderingModeAlwaysOriginal 即可更改符号颜色。
replyAction.image = [[UIImage systemImageNamed: @"arrowshape.turn.up.left.circle.fill"] imageWithTintColor: self.view.tintColor renderingMode: UIImageRenderingModeAlwaysOriginal];
【讨论】:
action.image = someImage.withTintColor(.green, renderingMode: .alwaysOriginal)