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 系统颜色的后备行为


基础教程推荐
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01