То, что вы испытываете, зависит только от точного времени, в течение которого прокси-сервер UIAppearance применяет свои настройки к новому UIView.Когда мы должны предполагать, что это делает это?Он не может сделать это до init
, потому что init
- это первое, что происходит в жизни UIView.Таким образом, порядок событий выглядит следующим образом:
override init(frame: CGRect) {
super.init(frame: frame)
setup() // black
}
// and some time later, UIAppearance proxy comes along and sets it to white
Итак, ваша цель - позвонить на setup
довольно рано в жизни лейбла - и, конечно же, прежде чем пользователь когда-либо сможет его увидеть -но не так рано , что прокси-сервер UIAppearance действует позже .Давайте переместим вызов на setup
чуть позже в жизни лейбла:
// some time earlier, UIAppearance proxy sets it to white
override func didMoveToSuperview() {
setup() // black
}
Теперь мы действуем после у прокси внешнего вида был шанс действовать,и поэтому ваши настройки действуют последними, и они выигрывают день.
Мы остаемся в неведении относительно как рано мы могли бы перевести вызов на setup
и все же прийти после настройка внешнего вида прокси была соблюдена.Если у вас есть время, вы можете поэкспериментировать с этим.Например, willMoveToSuperview
раньше;если вы позвоните туда setup
(а не в didMoveToSuperview
), это сработает?Поиграйте и узнайте!