ios - 评估 UITraitCollection 的 hasDifferentColorAppearance(与 :) result 相比

标签 ios swift uitraitcollection ios-darkmode

在我的应用程序中,当 iOS 系统暗模式设置发生变化时,我需要进行一些自定义 UI 更改。根据https://developer.apple.com/videos/play/wwdc2019/214/明确提到要实现 traitCollectionDidChange 并使用 hasDifferentColorAppearance(comparedTo:) 比较之前和当前的特征集合。

文档说:

Use this method to determine whether changing the traits of the current environment would also change the colors in your interface. For example, changing the userInterfaceStyle or accessibilityContrast property usually changes the colors of your interface.

在我实现的 View Controller 的子类中

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {

        super.traitCollectionDidChange(previousTraitCollection)

        if #available(iOS 13.0, *),
            self.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {

            let isSameUserInterfaceStyle = (self.traitCollection.userInterfaceStyle == previousTraitCollection?.userInterfaceStyle)
            let isSameAcessibilityContrast = (self.traitCollection.accessibilityContrast == previousTraitCollection?.accessibilityContrast)

            // do custom stuff
        }
    }

但在某些情况下,isSameUserInterfaceStyleisSameAcessibilityContrast 都评估为 true 如果 hasDifferentColorAppearance(comparedTo:) 也返回 true。 我不喜欢使用 Apple 建议的 API 用法,但另一方面,如果 userInterfaceStyle 实际上没有更改,我不想对我的 UI 进行不必要的更改。所以我不确定我是否应该依赖 hasDifferentColorAppearance(comparedTo:) 的结果,或者是否只比较两个特征集合的 userInterfaceStyle 就足够了。

最佳答案

对两个特征集合的更深入调查表明,当前特征集合的 userInterfaceLevel 属性设置为 .elevated。所有其他特性都相同。 userInterfaceLevel 值的变化是由将另一个 View Controller 呈现为弹出窗口引起的。考虑到这个事实,我需要额外检查 self.traitCollection.userInterfaceStyle != previousTraitCollection?.userInterfaceStyle 以确定暗/亮外观是否实际发生了变化。

关于ios - 评估 UITraitCollection 的 hasDifferentColorAppearance(与 :) result 相比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993277/

相关文章:

ios - Siren库如何获取当前的应用商店版本?

xcode - 在监视全局变量的 XCode 上设置条件断点

swift - 在初始化时将对象添加到列表

ios - 快速设置 Collection View 单元格大小相对于屏幕大小

ios - iPad 上的 UITraitCollection 和 UISplitViewController

uicolor - iOS13:如何在 Assets 目录中为提升的用户界面级别指定颜色

ios - 确认 UIWebView 链接点击

ios - 连接蓝牙键盘时显示虚拟键盘?

ios - 在 UITableViewController 底部添加一个带动画的按钮

iOS 9 黑色启动屏幕