[英]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.