即使您创建了一个新的单一视图项目(Xcode 9.2),在资产目录中创建一个命名颜色,在IB中将主视图控制器的背景颜色设置为此颜色,并尝试更新背景颜色viewDidLoad,背景颜色不会改变。让其他人体验过这个吗?这是正常的行为吗?
view.backgroundColor = .red // Doesn't work, the asset color set in IB remains
答案 0 :(得分:5)
超级有趣,你是正确的,它不会像预期的那样改变颜色值。关于何时在超类中设置IB属性必须有一些延迟。在DispatchQueue.main.async中包装颜色更改使其在viewDidLoad中工作。可能是因为这个代码将在超类使用IB属性后最后处理。希望这能解决问题。
DispatchQueue.main.async {
self.view.backgroundColor = UIColor.blue
}
同样在viewDidLayoutSubviews和viewDidAppear中,它在没有DispatchQueue的情况下工作,但与viewWillAppear中的viewDidLoad具有相同的行为,因为它没有按预期工作。
答案 1 :(得分:0)
此问题已在iOS 13中修复(已在Xcode 11 beta 4的iOS 13上进行测试)