我们可以使用动态提供程序扩展UIColor类,并使颜色立即变为暗和亮模式,就像这样
extension UIColor {
static var myControlBackground: UIColor {
return UIColor { (traits) -> UIColor in
// Return one of two colors depending on light or dark mode
return traits.userInterfaceStyle == .dark ?
UIColor(red: 0.5, green: 0.4, blue: 0.3, alpha: 1) :
UIColor(red: 0.3, green: 0.4, blue: 0.5, alpha: 1)
}
}
}
但是UIImages呢?
我知道您可以使用此方法
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
if traitCollection.hasDifferentColorAppearance(comparedTo:
previousTraitCollection) {
// Color change detected.
// Adjust the interface accordingly.
}
}
问题是,如果应用程序在后台发生更改,则此方法不会检测到更改。颜色动态方法可以。
任何想法
您正在寻找UIImageAsset类:
https://developer.apple.com/documentation/uikit/uiimageasset
[基本上,您将图像资产与UIImage的版本一起用于不同的特征集合,并在具有图像及其对应特征集合的图像资产上调用register
。