gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 05:31:43 25 4
gpt4 key购买 nike

在我的应用程序中,当 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com