当应用程序处于后台时,hasDifferentColorAppearance 为真

and*_*lin 7 uitraitcollection ios13 ios-darkmode

Apple 建议我们使用traitCollectionDidChangehasDifferentColorAppearance 来使用和比较特征集合,以捕捉何时切换暗模式,并在需要时对其进行操作。像这样:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    if #available(iOS 13.0, *) {
        let hasUserInterfaceStyleChanged = previousTraitCollection?.hasDifferentColorAppearance(comparedTo: traitCollection) ?? false
        if (hasUserInterfaceStyleChanged) {
            //Update UI
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我用它来更新 UI,在暗模式和亮模式之间切换时清除一些缓存等。

出于某种原因traitCollectionDidChangehasDifferentColorAppearance每次我的应用程序处于后台时都会触发并评估为 true,无论我是否在设备上启用了暗模式。在这种情况下,previousTraitCollection 和当前 traitCollection 似乎从来没有匹配的 interfaceStyles。如果 userInterfaceStyle 实际上没有改变,我宁愿避免在 userInterfaceStyle 改变时进行更新。

这是一个错误,还是我只是错过了什么?

Fra*_*gel 7

iOS版的光生成UI的快照暗的外观(也为纵向和横向)每个应用程序被转到后台运行在应用切换器的用户界面预览您的应用程序的时间。所以这是完全正常的行为。