【发布时间】:2021-09-30 04:36:31
【问题描述】:
我希望我的文本在正常模式下显示为.white,在暗模式下显示为.black。我怎么做? .label 仅使文本 .black 处于正常模式,.white 处于暗模式,但我希望它反过来。
谁有解决办法?
【问题讨论】:
-
只需创建自定义颜色集或使用
systemBackgroundcolor
标签: swift colors label ios-darkmode
我希望我的文本在正常模式下显示为.white,在暗模式下显示为.black。我怎么做? .label 仅使文本 .black 处于正常模式,.white 处于暗模式,但我希望它反过来。
谁有解决办法?
【问题讨论】:
systemBackground color
标签: swift colors label ios-darkmode
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)
(请注意,您可以使用提供的特征集合中的任何其他特征。例如,如果尺寸类发生变化,您可以返回不同的颜色)
【讨论】: