当应用程序后台运行时,hasDifferentColorAppearance为true

时间:2019-09-22 18:44:09

标签: ios13 uitraitcollection ios-darkmode

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更改时所做的更新。

这是一个错误,还是我只是缺少一些东西?

1 个答案:

答案 0 :(得分:4)

iOS每次在后台打开应用程序切换器用户界面中的应用程序时,都会为您的UI创建快照,以实现浅色深色外观(以及纵向和横向)。因此,这是完全正常的行为。