1

编辑:根据下面的对话,我感到困惑的是,并非所有系统颜色都与旧操作系统兼容,在我的情况下,标签和 systemBackground 颜色仅是 iOS13,需要回退。现在说得通了。

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

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

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

如果我尝试在不使用旧系统的回退的情况下使用颜色,我会收到一个错误……这有点道理,我说的有点是因为system colors (StandarColors)iOS 中支持的文档状态7.0+

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

1-当您直接从属性检查器中使用新的系统颜色时会发生什么,在选择它们时不会出错?

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

谢谢

4

1 回答 1

3

如果您在代码中使用新的系统颜色(systemOrange如 rmaddy 正确指出的除外),您必须检查 iOS 13 的可用性,因为该 API 之前不存在。

但是,当您在 Interface Builder 中选择这样的颜色时,它会在较旧的 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每次都检查的解决方案,您可以使用您在资产目录中定义的颜色资产。

我还创建了一个帮助器来做到这一点。

于 2019-10-20T19:22:37.330 回答