【发布时间】:2020-01-19 10:35:21
【问题描述】:
在我的应用程序中,当 iOS 系统暗模式设置更改时,我需要进行一些自定义 UI 更改。根据https://developer.apple.com/videos/play/wwdc2019/214/,明确提到要实现traitCollectionDidChange并使用hasDifferentColorAppearance(comparedTo:)比较以前和当前的特征集合。
文档说:
使用此方法可以确定更改当前环境的特征是否也会更改界面中的颜色。例如,更改 userInterfaceStyle 或 accessibilityContrast 属性通常会更改界面的颜色。
在我实现的视图控制器的子类中
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
}
}
但在某些情况下,isSameUserInterfaceStyle 和 isSameAcessibilityContrast 都会评估为 true,如果 hasDifferentColorAppearance(comparedTo:) 也返回 true,我没想到。
我不喜欢解决 Apple 建议的 API 用法,但另一方面,如果 userInterfaceStyle 实际上没有改变,我不想对我的 UI 进行不必要的更改。所以我不确定我是否应该依赖hasDifferentColorAppearance(comparedTo:) 的结果,或者仅比较两个特征集合的userInterfaceStyle 就足够了。
【问题讨论】:
-
发生这种情况时能否打印两个特征集合?也许还有其他事情发生......
-
@RTasche 您应该将其作为完整答案发布在下面。这是一个有趣的信息。
标签: ios swift uitraitcollection ios-darkmode