Цвет UIView не может быть изменен программно после установки именованного цвета - PullRequest
0 голосов
/ 16 мая 2018

Даже когда вы создаете новый проект с одним представлением (Xcode 9.2), создаете один именованный цвет в каталоге активов, задаете цвет фона контроллера основного представления на этот цвет в IB и пытаетесь обновить цвет фона в viewDidLoad, цвет фона не изменится. Испытывали ли это другие люди? Это нормальное поведение?

view.backgroundColor = .red // Doesn't work, the asset color set in IB remains

Ответы [ 2 ]

0 голосов
/ 19 июля 2019

Это было исправлено в iOS 13 (тестированная сборка на iOS 13 с Xcode 11 beta 4)

0 голосов
/ 16 мая 2018

Супер интересно, и вы правы, это не меняет значение цвета, как ожидалось.Должна быть некоторая задержка относительно того, когда атрибуты IB установлены в суперклассе.Обтекание изменения цвета в DispatchQueue.main.async заставляет его работать в viewDidLoad.Возможно, потому что этот код будет обрабатываться последним после того, что суперкласс делает с атрибутами IB.Надеюсь, что это решит проблему.

DispatchQueue.main.async {
   self.view.backgroundColor = UIColor.blue
}

Также в viewDidLayoutSubviews и viewDidAppear он работает без DispatchQueue, но имеет то же поведение, что и viewDidLoad в viewWillAppear, не работает должным образом.

...