问题描述
我目前正在采用暗模式,我认为在 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 系统颜色的后备行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!