iOS暗模式用户界面样式在后台输入时来回更改

问题描述

支持黑暗模式。在某些视图控制器中,我使用traitCollectionDidChange(_)处理用户界面样式的更改。

override func traitCollectionDidChange(_ prevIoUsTraitCollection: uitraitcollection?) {
        super.traitCollectionDidChange(prevIoUsTraitCollection)
        if #available(iOS 13.0,*) {
            if let p = prevIoUsTraitCollection {
                print("TRAIT COLLECTION \(p.userInterfaceStyle.desc) -> \(traitCollection.userInterfaceStyle.desc). \(UIApplication.shared.applicationState.desc); \(p.hasDifferentColorAppearance(comparedTo: traitCollection) ? "TRAIT CHANGED" : "TRAIT SAME")")
            }
        }
    }

当我按下主页按钮并进入背景时,此方法将触发两次:

TRAIT COLLECTION DARK -> LIGHT. BACKGROUND; TRAIT CHANGED
TRAIT COLLECTION LIGHT -> DARK. BACKGROUND; TRAIT CHANGED

当我在iOS设置中更改外观并回到前台时,我得到了

TRAIT COLLECTION DARK -> LIGHT. INACTIVE; TRAIT CHANGED

奇怪。每次我在后台运行时,都会来回更改用户界面样式。为什么?

解决方法

这是预期的行为。当您的应用暂停时,iOS会拍摄一个屏幕快照以显示在应用切换器中。

要考虑在挂起应用程序时发生从亮到暗或从暗到亮的切换的情况,实际上它会拍摄两个快照;一亮一暗。

然后iOS可以在应用切换器中显示正确的快照。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...