Можно ли перезагрузить приложение при смене темного / светлого режима? - PullRequest
0 голосов
/ 24 октября 2019

Мое приложение широко использует CAGradientLayers, которые, по-видимому, не обновляют автоматически свои цвета при переключении темного / светлого режима. Они обновят свои цвета, когда приложение будет закрыто и снова открыто.

Я знаю, что могу использовать следующий код, чтобы обнаружить изменение и перезагрузить каждое представление отдельно

 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        // 
    }

Однако я ищу исправление, которое не требует от меня обновления каждого представления отдельно. Есть ли способ обнаружить изменение режима «свет / темнота» (возможно, внутри делегата приложения) и заставить все приложение перезагрузить себя (как если бы оно было принудительно закрыто и снова открыто)?

Ответы [ 2 ]

3 голосов
/ 24 октября 2019

Нет способа "перезагрузить ваше приложение" таким образом. Проблема возникает из-за того, что CAGradientLayer использует CGColor, который не адаптируется динамически к стилю системы.

Я решил проблему, поместив UIView вокруг слоя градиента, который реализует traitCollectionDidChange для обновленияцвета градиента соответственно. Может быть, вы можете сделать то же самое и использовать это как подпредставление вместо подслоя.

0 голосов
/ 24 октября 2019

Вы можете создать суперкласс UIViewController, который переопределяет traitCollectionDidChange

...