Swift Как можно сбросить цвета всех подвидов на странице?

Как можно автоматически сбросить цвета всех подвидов на странице?

Я определяю цвета темного режима, делая что-то вроде этого:

    static let textColor: UIColor = UITraitCollection.current.userInterfaceStyle == .light ? .black : .white

Если у пользователя открыто приложение, когда автоматически включается темный режим (в зависимости от настроек пользователя), цвета не меняются. Вам нужно закрыть приложение и снова открыть его, чтобы увидеть темный режим.

Как можно автоматически сбросить цвета всех подвидов на странице?

Вот что я пробовал:

 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    view.layoutSubviews()
    view.subviews.forEach {$0.layoutSubviews()}
}

LayoutSubviews не сбрасывает цвет.

Любые идеи?

Спасибо!


person Ryan    schedule 31.10.2020    source источник
comment
Отвечает ли это на ваш вопрос? Как проверить, включен ли темный режим включен в iOS / iPadOS?   -  person dfd    schedule 31.10.2020
comment
Пометка этого как дубликата - см. Второй фрагмент кода в stackoverflow.com/questions/56435720/ - Я с радостью удалю свой дублирующий голос, если вы спрашиваете что-то другое. (1) Я не вижу проверки на .userInterfaceStyle в вашем коде. (2) Не должно быть необходимости вызывать layoutSubviews, просто измените то, что вам нужно, на светлое / темное, и пусть ОС сделает всю работу.   -  person dfd    schedule 31.10.2020
comment
это не помогает. Проверка по цвету. Как вы сбрасываете представления, чтобы повторно применить цвет фона?   -  person Ryan    schedule 31.10.2020
comment
Может я все еще не понимаю ..... чек идет по цвету? Это не свет и не тьма - это что-то еще? Если да, то почему вы указали цвета темного режима и смотрите на коллекции признаков? Пожалуйста, будьте более конкретными. Приведите лучший пример, который можно повторить.   -  person dfd    schedule 31.10.2020


Ответы (1)


Вам необходимо использовать динамические цвета, чтобы они автоматически адаптировались. Здесь

UITraitCollection.current.userInterfaceStyle == .light ? .black : .white

вы проверяете стиль интерфейса прямо в этот момент и устанавливаете цвет, но этот код не переоценивается автоматически при изменении среды признака.

Вместо этого вы можете использовать один из системных цветов (например, .background или .label), который автоматически адаптируется к изменениям темного / светлого режима. Если вы хотите определить свое собственное, проще всего использовать каталоги активов. Когда вы добавляете туда цвет, вы можете определить, как он будет выглядеть отдельно в светлом и темном режиме.

person Frank Schlegel    schedule 31.10.2020