[英]How to provide CGColor dynamically when switching dark/light mode?
我已经在我的 Swift 应用程序中为 OS13 设置了一个动态UIColor
来处理暗模式。
例如:
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
}
它有效,但我注意到,如果我使用底部滑动手势切换回我的应用程序,更改设置中的模式后,我可以看到所有UIColor
已经在传入屏幕上更新,但CGColor
只更新当应用程序真正进入前台并traitCollectionDidChange
。
有没有更好的方法来解决这个问题,以便CGColor
也立即更新?
转到 Xcode > Assets.xcassets > new Color Set > 设置明暗外观的颜色
现在在视图背景颜色中设置此颜色
self.view.backgroundColor = UIColor.init(named: "ColorForCameraScreen")
不幸的是,是的,这是您唯一的选择。
CGColor
是一个CoreGraphics
原语,一个简单的静态 C 结构,它不会从新的UIColor
动态功能中受益。
但是,在最新版本的 iOS(我正在 15.0 上进行测试)中,您的CGColors
应该在 App Switcher 中正确更新。
您可以在jessesquires 的这篇文章和其他答案中找到更多详细信息。
我希望这个(迟到的)答案有助于对此有所了解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.