hasDifferentColorAppearance - это правда, когда приложение является фоновым - PullRequest
1 голос
/ 22 сентября 2019

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 фактически не изменился.

Это ошибка, или я просто что-то упустил?

1 Ответ

1 голос
/ 22 сентября 2019

iOS создает снимки вашего пользовательского интерфейса для светлого и темного внешнего вида (а также для портретной и альбомной ориентации) каждый раз, когда приложение становится фоновым для предварительного просмотра приложения в интерфейсе переключателя приложений.Так что это совершенно нормальное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...