iOS 深色模式。用户界面样式在进入后台时来回变化
iOS dark mode. User Interface Style changes back and forth on entering on the background
我支持深色模式。在我的一些视图控制器中,我使用 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 然后可以在应用程序切换器中显示正确的快照。
我支持深色模式。在我的一些视图控制器中,我使用 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 然后可以在应用程序切换器中显示正确的快照。