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

How to handle custom colors for Dark Mode in Swift

这是我目前处理 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 中处理深色模式的自定义颜色并为其他操作系统提供回退的一种平易近人的方法吗?

在资产目录中创建颜色。

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

访问

请看Supporting Dark Mode in Your Interface

是的,它使用颜色资产,外观设置为任意、深色

然后使用资产名称和 UIColor(named: "AssetName") 无需任何版本检查或检查界面样式

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