如何在Swift中处理深色模式的自定义颜色

时间:2019-10-21 14:00:27

标签: ios swift ios13 ios-darkmode

这是我目前在暗模式下处理UI Element Colors的方式,对于较旧的操作系统会回退。

extension UIColor {
    class var mySystemBackground: UIColor {
        if #available(iOS 13, *) {
            return .systemBackground
        } else {
            return .white
        }
    }
}

在这种情况下,systemBackground知道何时处于暗模式和何时处于亮模式,并且会相应地更改。我想使用自定义颜色做类似的事情。

例如,我有一个自定义的黄色,当前正在整个应用程序中使用,我想在黑暗模式下为其提供不同的颜色。

这是我在想的代码...

extension UIColor{
    class var mySystemYellowColor: UIColor {
        // default light-color 
        var myYellow = UIColor(red: 254/255, green: 219/255, blue: 2/255, alpha: 1.0) /* #fedb02 */

        if #available(iOS 13.0, *) {  

            if traitCollection.userInterfaceStyle == .light {
                return myYellow
            } else {
                // color for dark mode in iOS 13.0
                myYellow = UIColor(red: 242/255, green: 125/255, blue: 0/255, alpha: 1.0) /* #f27d00 */
            }
            return myYellow

        } else {
            return myYellow
        }
    }
}

这是处理iOS13中深色模式的自定义颜色并回退其他操作系统的一种可行方法吗?

3 个答案:

答案 0 :(得分:7)

在资产目录中创建颜色。

可以为不同的外观创建资产目录中的颜色,并可以使用UIColor(named:) API

进行访问

请参阅Supporting Dark Mode in Your Interface

答案 1 :(得分:2)

是的,它使用颜色资产,并且外观设置为“任意,深色”

然后使用资产名称和UIColor(名称:“ AssetName”) 不需要任何版本检查或界面风格

答案 2 :(得分:0)

我向资产添加了附加元素 - 颜色集并确定了 2 种颜色 - 用于浅色和深色主题(来源:https://skalolaskovy.ru/xcode/556-ios-dark-theme-support-simple-implementation 俄罗斯文章)。 您可以根据需要创建一些颜色集。