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
}
}
}
Я использую это для обновления пользовательского интерфейса, очистки некоторых кэшей и т. Д. При переключении между темным и светлым режимами.
По некоторым причинам traitCollectionDidChange
срабатывает и hasDifferentColorAppearance
оцениваетв true каждый раз, когда мое приложение имеет фоновый режим, независимо от того, включен ли на устройстве темный режим или нет.Похоже, что в этом случае предыдущая коллекция и текущая коллекция traitCollection никогда не имеют совпадающих стилей интерфейса.Я бы предпочел не делать обновления, которые я делаю, когда изменяется userInterfaceStyle, если userInterfaceStyle фактически не изменился.
Это ошибка, или я просто что-то упустил?