在我的应用程序中,当 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
我没想到 ifhasDifferentColorAppearance(comparedTo:)
也会返回true
。我不喜欢解决 Apple 建议的 API 用法,但另一方面,如果userInterfaceStyle
没有实际更改,我不想对我的 UI 进行不必要的更改。所以我不确定我是否应该依赖的结果,或者仅比较两个特征集合hasDifferentColorAppearance(comparedTo:)
是否就足够了。userInterfaceStyle