traitCollectionDidChange никогда не вызывается в подклассе UIView - PullRequest
0 голосов
/ 27 марта 2020

У меня есть UIViewController, который представлен модально другим UIViewController. У этого UIViewController есть UITableView с пользовательским UIView, установленным для него tableFooterView.

. Поэтому у меня возникает проблема: некоторые цвета не отображаются должным образом при переключении внешнего вида устройства. Как я прочитал, cgColor не адаптируется автоматически к изменениям внешнего вида:

Цветовой объект в этом свойстве не адаптируется автоматически к изменениям темного режима. Если вы используете его для установки цвета элементов интерфейса, вы должны обновить этот цвет самостоятельно, когда изменяется признак userInterfaceStyle текущей коллекции признаков. Информацию о том, как надежно применять информацию о цвете, см. В разделе Поддержка темного режима в вашем интерфейсе.

https://developer.apple.com/documentation/uikit/uicolor/1621954-cgcolor

Поэтому для решения этой проблемы я переопределяю traitCollectionDidChange внутри UIView, который использует cgColor следующим образом:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)

        updateView()
    }

В методе updateView я просто обновляю свойства cgColor некоторых подслоев, но этот метод никогда не получится называется. Я попытался переопределить этот метод в superview из UIView, который имеет ту же проблему. Он вызывается только на уровне UIViewController, который бесполезен, потому что tableFooterView еще не установлен на данный момент.

Есть идеи, как мне это решить?

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