5

iOS 13 给我们带来了UIUserInterfaceLevel,可以是.base或者.elevatedUIView当在暗模式下使用升高的级别时,系统似乎会自动调整提供的颜色。

但是,似乎没有办法在资产目录中.elevated手动指定颜色,或者是吗?

唯一的方法似乎是通过新的 UIColor 构造函数

UIColor.init { (traits) -> UIColor in
   traits.userInterfaceLevel == .elevated ? UIColor(named: "myColor-elevated")! : UIColor(named: "myColor")!
}
4

2 回答 2

3

据我所知,色彩资产无法做到这一点。

当您使用系统背景和填充颜色时,iOS 会在提升级别时自动选择“下一个更高”的颜色,即.systemBackground变为.secondarySystemBackground等。

于 2019-09-20T11:06:17.950 回答
1

我的解决方案是结合.xcassets这个依赖于特征的初始化程序。对于每种颜色,我创建了一个具有浅色和深色的颜色集和另一个仅包含提升颜色的颜色集(对于任何变体)。

然后我添加了一个扩展名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
}
于 2021-01-14T07:50:24.403 回答