首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >评估UITraitCollection的hasDifferentColorAppearance(comparedTo:)结果

评估UITraitCollection的hasDifferentColorAppearance(comparedTo:)结果
EN

Stack Overflow用户
提问于 2019-09-18 12:51:29
回答 1查看 549关注 0票数 3

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

文件上说:

使用此方法来确定更改当前环境的特征是否也会改变界面中的颜色。例如,更改userInterfaceStyle或accessibilityContrast属性通常会更改接口的颜色。

在我的视图控制器的子类中,我实现了

代码语言:javascript
复制
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的话,这是我所没有想到的。我不喜欢苹果建议的API使用,但另一方面,如果userInterfaceStyle没有真正改变,我不想对我的UI进行不必要的更改。因此,我不确定是否应该依赖hasDifferentColorAppearance(comparedTo:)的结果,或者仅仅比较这两个特性集合的userInterfaceStyle是否就足够了。

EN

回答 1

Stack Overflow用户

发布于 2019-09-20 08:21:12

对这两种特征集合的深入研究揭示了当前特性集合的userInterfaceLevel属性是.elevated。所有其他属性都是相同的。userInterfaceLevel值的变化是由于将另一个视图控制器作为弹出器而引起的。考虑到这一事实,我需要另外检查self.traitCollection.userInterfaceStyle != previousTraitCollection?.userInterfaceStyle,以确定暗/光外观是否真的发生了变化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57993277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档