iOS 13带给我们UIUserInterfaceLevel
,可以是.base
或.elevated
。在暗模式下使用提升的水平时,系统似乎会自动调整提供给UIView
的颜色。
但是,似乎没有办法手动在资产目录中手动指定.elevated
颜色,是吗?
唯一的方法似乎是通过the new UIColor constructor:
UIColor.init { (traits) -> UIColor in
traits.userInterfaceLevel == .elevated ? UIColor(named: "myColor-elevated")! : UIColor(named: "myColor")!
}
答案 0 :(得分:2)
据我所知,没有办法使用颜色资产。
当您使用系统背景色和填充色时,iOS会在较高级别上自动选择“更高的颜色”,即.systemBackground
变为.secondarySystemBackground
,等等。
答案 1 :(得分:1)
我的解决方案是将 .xcassets
与这个 trait-dependent 初始化器结合起来。对于每种颜色,我创建了一个带有浅色和深色的颜色集,以及另一个仅包含提升颜色的颜色集(对于任何变体)。
然后我为 UIColor
添加了一个扩展。此扩展程序可让您轻松访问整个应用中的所有颜色,并包含选择正确颜色的逻辑。
extension UIColor {
static let backgroundPrimary = UIColor { (trait) -> UIColor in
switch (trait.userInterfaceStyle, trait.userInterfaceLevel) {
case (.dark, .elevated):
// For this color set you can set "Appearances" to "none"
return UIColor(named: "backgroundPrimaryElevated") ?? .black
default:
// This color set has light and dark colors specified
return UIColor(named: "backgroundPrimary") ?? .black
}
}
// ... All the other colors
}