【问题标题】:reverse .label in swift快速反转.label
【发布时间】:2021-09-30 04:36:31
【问题描述】:

我希望我的文本在正常模式下显示为.white,在暗模式下显示为.black。我怎么做? .label 仅使文本 .black 处于正常模式,.white 处于暗模式,但我希望它反过来。

谁有解决办法?

【问题讨论】:

  • 只需创建自定义颜色集或使用systemBackground color

标签: swift colors label ios-darkmode


【解决方案1】:

let myLabelColor = UIColor(dynamicProvider: { $0.userInterfaceStyle == .dark ? .black : .white })


从 iOS 13 开始,UIColor 有一个 init(dynamicProvider:)

创建一个使用指定块动态生成其颜色数据的颜色对象。
https://developer.apple.com/documentation/uikit/uicolor/3238041-init

如果您要创建大量动态颜色,您可能需要创建一个方便的 init——这样可以节省您的打字时间,并且您的意图对读者来说更清楚:

extension UIColor {

    /// Creates a color object that responds to `userInterfaceStyle` trait changes.
    public convenience init(light: UIColor, dark: UIColor) {
      guard #available(iOS 13.0, *) else { self.init(cgColor: light.cgColor); return }
      self.init(dynamicProvider: { $0.userInterfaceStyle == .dark ? dark : light })
    }

}

用法:let myLabelColor = UIColor(light: .white, dark: .black)


(请注意,您可以使用提供的特征集合中的任何其他特征。例如,如果尺寸类发生变化,您可以返回不同的颜色)

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 2018-08-22
    • 2021-06-24
    • 2019-03-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多