【问题标题】:Image in TableViewCell swipe actionTableViewCell 滑动操作中的图像
【发布时间】:2018-07-29 15:57:21
【问题描述】:

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

但是当单元格被滑动时,图像是这样的:

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

如果没有,有没有办法让绿色背景“包裹”到单元格的紫色,这样就没有空白了? 谢谢!

【问题讨论】:

    标签: ios swift uitableview uiswipeactionsconfiguration


    【解决方案1】:

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

    也许这对某人有帮助。

    【讨论】:

    • 这非常有效。可以应用于 UIMenu 中的 UIAction 图标。谢谢
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 这似乎不起作用?我把你写的东西放进了我的 AppDelegate.swift 但没有任何改变。这是函数: func applicationDidFinishLaunching(_ application: UIApplication) { UIImageView.appearance( whenContainedInInstancesOf: [UITableView.self]) .tintColor = .yellow // 不管绿色是什么 }
    • 应用委托方法被称为application(_:didFinishLaunchingWithOptions:)。您不必添加它;它已经在那里了。
    • 不用担心 - 很抱歉 Apple 没有提供真正的方法来做到这一点,您可以提交增强请求。
    【解决方案3】:

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

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

    【讨论】:

    • 在 iOS 13 中,可以简单地使用 action.image = someImage.withTintColor(.green, renderingMode: .alwaysOriginal)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2016-08-20
    • 2017-12-01
    • 2016-10-27
    • 1970-01-01
    相关资源
    最近更新 更多