Apple建议我们使用traitCollectionDidChange
并使用hasDifferentColorAppearance比较特征集,以在切换黑暗模式时进行捕捉,并在需要时对其进行操作。像这样:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if #available(iOS 13.0, *) {
let hasUserInterfaceStyleChanged = previousTraitCollection?.hasDifferentColorAppearance(comparedTo: traitCollection) ?? false
if (hasUserInterfaceStyleChanged) {
//Update UI
}
}
}
在黑暗和明亮模式之间切换时,我使用它来更新UI,清除一些缓存等。
由于某些原因,无论我是否在设备上启用了暗模式,每次我的应用程序运行时,traitCollectionDidChange
都会触发,hasDifferentColorAppearance
的评估结果为true。在这种情况下,以前的TraitCollection和当前的traitCollection似乎从未具有匹配的interfaceStyles。如果userInterfaceStyle实际没有更改,我宁愿避免执行userInterfaceStyle更改时所做的更新。
这是一个错误,还是我只是缺少一些东西?
答案 0 :(得分:4)
iOS每次在后台打开应用程序切换器用户界面中的应用程序时,都会为您的UI创建快照,以实现浅色和深色外观(以及纵向和横向)。因此,这是完全正常的行为。