iOS 12 中新的 iOS 13 系统颜色的后备行为

Fallback behavior for new iOS 13 system colors in iOS 12(iOS 12 中新的 iOS 13 系统颜色的后备行为)
本文介绍了iOS 12 中新的 iOS 13 系统颜色的后备行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在采用暗模式,我认为在 Interface Builder 中使用新的系统颜色(如 systemBackgroundlabel 也可以正常工作 在 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 系统颜色的后备行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Why local notification is not firing for UNCalendarNotificationTrigger(为什么没有为UNCalendarNotificationTrigger触发本地通知)
iOS VoiceOver functionality changes with Bundle Identifier(IOS画外音功能随捆绑包标识符而变化)
tabbar middle tab out of tabbar corner(选项卡栏中间的选项卡角外)
Pushing UIViewController above UITabBar(将UIView控制器推送到UITabBar上方)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)
Get an event when UIBarButtonItem menu is displayed(显示UIBarButtonItem菜单时获取事件)