了解旧版本 iOS 中暗模式的 SystemColors

Understanding SystemColors for dark mode in older iOS

编辑:根据下面的对话,我感到困惑的是并非所有系统颜色都与旧操作系统兼容,在我的例子中,标签和系统背景颜色只有 iOS13,这需要回退.现在说得通了。

我有一个支持 iOS11 的应用程序,但我想为 iOS13 的用户提供深色模式。

在 Xcode 11/iOS13 中,您可以为深色模式指定系统颜色,并为较旧的操作系统提供回退,如下所示...

if #available(iOS 13.0, *) {
    view.textColor = UIColor.label
} else {
    view.textColor = UIColor.black
}

如果我尝试使用没有旧系统后备的颜色,我会收到一个错误,这……有点道理,我说有点道理,因为文档指出 system colors (StandarColors) 在 [= 中受支持36=] 7.0+.

有趣的是,如果我直接从 Attributes Inspector 使用新的系统颜色,我不会收到错误,所以我的问题是...

1- 当您直接从 Attributes Inspector 使用新的系统颜色时会发生什么,而您在选择它们时没有收到错误消息?

2- iOS11 的用户在直接从属性检查器中选择 label 颜色的视图中会看到什么?

谢谢

如果您在代码中使用新的系统颜色(systemOrange 除外,正如 rmaddy 正确指出的那样),您必须检查 iOS 13 可用性,因为 API 是以前没有。

但是,当您在 Interface Builder 中 select 这样的颜色时,它会自动在旧的 iOS 版本中工作。在这种情况下,Interface Builder 在您的情节提要中插入的内容如下:

<color key="backgroundColor" systemColor="systemOrangeColor" red="1" green="0.58431372550000005" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>

如您所见,添加回退以防 systemColor 属性不被理解。

如果您想要一个 iOS 11 兼容且不需要每次 @available 检查的解决方案,您可以使用您在资产目录中定义的颜色资产。

我还创建了 a helper 正是这样做的。