首页 > 解决方案 > iOS 12 中新的 iOS 13 系统颜色的后备行为

问题描述

我目前正在采用深色模式,并且我认为在 iOS 12 中运行应用程序时systemBackgroundlabel在 Interface Builder 中使用新的系统颜色也可以正常工作。我有一半预计会出现编译器错误,但应用程序看起来像在 iOS 13种灯光模式。所以很明显,运行时以某种方式将这些颜色转换为 iOS 12。

有谁知道幕后发生了什么,是否有一种方便的方法可以在代码中实现相同的目标?

标签: iosuikitios13ios-darkmode

解决方案


如果您查看情节提要的 XML,您将看到如下内容:

<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>

Xcode 11 正在增加对这两种颜色的支持。无论哪种机制在运行时将 .storyboard 文件转换为操作,都具有它需要知道用于 iOS 13 的颜色以及用于 iOS 12 及更早版本的颜色的信息。

在代码中,您需要以下内容:

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

推荐阅读