【发布时间】:2020-04-12 00:16:03
【问题描述】:
我在我的 Swift 应用程序中为 OS13 设置了一个动态的UIColors 来处理暗模式。
例如:
static var background: UIColor {
if #available(iOS 13, *) {
return UIColor { (traitCollection: UITraitCollection) -> UIColor in
if traitCollection.userInterfaceStyle == .dark {
return UIColor(hex: "2b2d42")
} else {
return UIColor(hex: "FFFFFF")
}
}
} else {
return UIColor(hex: "FFFFFF")
}
}
在代码中的任何地方都使用CGColor 而不是UIColor 我打算像这样调用特定UIView 的traitCollectionDidChange,例如:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
layer.fillColor = color.cgColor
}
它可以工作,但我注意到的是,在更改设置中的模式后,如果我使用底部滑动手势切换回我的应用程序,那么我可以在传入屏幕上看到所有 UIColors 已经更新,但是CGColors 仅在应用实际进入前台并调用 traitCollectionDidChange 时才会更新。
有没有更好的方法来解决这个问题,以便CGColors 也立即更新?
【问题讨论】:
标签: ios swift ios-darkmode