Супер интересно, и вы правы, это не меняет значение цвета, как ожидалось.Должна быть некоторая задержка относительно того, когда атрибуты IB установлены в суперклассе.Обтекание изменения цвета в DispatchQueue.main.async заставляет его работать в viewDidLoad.Возможно, потому что этот код будет обрабатываться последним после того, что суперкласс делает с атрибутами IB.Надеюсь, что это решит проблему.
DispatchQueue.main.async {
self.view.backgroundColor = UIColor.blue
}
Также в viewDidLayoutSubviews и viewDidAppear он работает без DispatchQueue, но имеет то же поведение, что и viewDidLoad в viewWillAppear, не работает должным образом.