Fallback behavior for new iOS 13 system colors in iOS 12(iOS 12 中新的 iOS 13 系统颜色的后备行为)
问题描述
我目前正在采用暗模式,我认为在 Interface Builder 中使用新的系统颜色(如 systemBackground
和 label
也可以正常工作 在 iOS 12 中运行应用程序时.我预计会出现编译器错误,但应用程序看起来像在 iOS 13 轻量模式下.所以很明显,运行时以某种方式将这些颜色转换为 iOS 12.
I’m currently adopting to Dark Mode and I figured that using the new system colors like systemBackground
and label
in Interface Builder also just works when running the app in iOS 12. I half expected to get a compiler error, but instead the app looks like in iOS 13 light mode. So obviously the runtime somehow translates those colors for iOS 12.
有谁知道幕后发生了什么,是否有一种方便的方法可以在代码中实现相同的目标?
Does anyone know what happens under the hood and if there is a convenient way to achieve the same in code?
推荐答案
如果你查看 storyboard 的 XML,你会看到如下内容:
If you look at the XML of the storyboard, you will see something like:
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
Xcode 11 正在增加对这两种颜色的支持.无论哪种机制在运行时将 .storyboard 文件转换为操作,都具有它需要知道哪种颜色用于 iOS 13 以及哪种颜色用于 iOS 12 及更早版本的信息.
Xcode 11 is adding support for both colors. Whatever mechanism converts the .storyboard file into actions at runtime has the information it needs to know which color to use for iOS 13 and which color to use for iOS 12 and earlier.
在代码中,您需要如下内容:
In code you need something like the following:
extension UIColor {
class var mySystemBackground: UIColor {
if #available(iOS 13, *) {
return .systemBackground
} else {
return .white
}
}
}
这篇关于iOS 12 中新的 iOS 13 系统颜色的后备行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:iOS 12 中新的 iOS 13 系统颜色的后备行为


- Android - 拆分 Drawable 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01