hasDifferentColorAppearance 在应用后台时为真
hasDifferentColorAppearance is true when app is backgrounded
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,无论我是否在设备上启用暗模式。在这种情况下,previousTraitCollection 和当前 traitCollection 似乎从来没有匹配的 interfaceStyles。如果 userInterfaceStyle 实际上没有改变,我宁愿避免做我在 userInterfaceStyle 改变时所做的更新。
这是一个错误,还是我遗漏了什么?
iOS 正在创建您的 UI 的快照,以便在每次应用程序处于后台时 和 黑暗外观(以及纵向和横向方向)在应用程序切换器中预览您的应用程序 UI。所以这是完全正常的行为。
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,无论我是否在设备上启用暗模式。在这种情况下,previousTraitCollection 和当前 traitCollection 似乎从来没有匹配的 interfaceStyles。如果 userInterfaceStyle 实际上没有改变,我宁愿避免做我在 userInterfaceStyle 改变时所做的更新。
这是一个错误,还是我遗漏了什么?
iOS 正在创建您的 UI 的快照,以便在每次应用程序处于后台时 和 黑暗外观(以及纵向和横向方向)在应用程序切换器中预览您的应用程序 UI。所以这是完全正常的行为。