Swift 5:
traitCollectionDidChange也会接到几次电话.这就是我如何检测DarkMode运行时更改和设置 colored颜色 ().
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
setColors()
}
在setColors()函数中,我更新 colored颜色 .
extension UIViewController {
var isDarkMode: Bool {
if #available(iOS 13.0, *) {
return self.traitCollection.userInterfaceStyle == .dark
}
else {
return false
}
}
}
我有这样定义的 colored颜色 (适用于iOS<;13):
enum ColorCompatibility {
static var myOlderiOSCompatibleColorName: UIColor {
if UIViewController().isDarkMode {
return UIColor(red: 33, green: 35, blue: 37, alpha: 0.85)
}
else {
return UIColor(hexString: "#F3F3F3", alpha: 0.85)
}
}
}
例子:
private func setColors() {
myView.backgroundColor = ColorCompatibility.myOlderiOSCompatibleColorName
}
此外,您可能需要在ViewDidLoad/Will/DidAppear中调用SetColor,具体情况如下:
viewDidLoad() {
...
setColors()
...
}
对于iOS11+,您可以使用"命名 colored颜色 ",这是在assets资源 中定义的,在IB中更容易使用.
干杯