3

我支持暗模式。在我的一些视图控制器中,我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

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

4

1 回答 1

10

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

为了考虑到在您的应用程序暂停时发生从亮到暗或从暗到亮的切换的情况,它实际上需要两个快照;一亮一暗。

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

于 2020-08-12T08:36:07.623 回答