【问题标题】:hasDifferentColorAppearance is true when app is backgrounded当应用程序后台运行时,hasDifferentColorAppearance 为真
【发布时间】:2020-01-22 22:19:57
【问题描述】:

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

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 改变时进行更新。

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

【问题讨论】:

  • 你验证过interfaceStyles是否真的不同吗? hasDifferentColorAppearance 可以在 interfaceStyles 相同的情况下返回 true。其他特征可能会有所不同。
  • @rmaddy 是的,它们是不同的。当我的手机关闭暗模式时,以前的界面样式是亮的,而当前的界面样式是暗的。但是 traitCollectionDidChange 实际上每次应用程序后台调用时都会调用两次。第一次,前一个界面样式是亮当前暗,第二次前一个是暗当前一个亮。所以就好像它从光明变成黑暗,然后又回到光明。

标签: ios13 uitraitcollection ios-darkmode


【解决方案1】:

iOS 会为您的 UI 创建快照,以便在应用切换器 UI 中预览您的应用时,为浅色和 外观(以及纵向和横向方向)创建您的 UI 快照。所以这是完全正常的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多