设置命名颜色后,无法以编程方式更改UIView的颜色

时间:2018-05-16 14:21:52

标签: ios xcode colors interface-builder

即使您创建了一个新的单一视图项目(Xcode 9.2),在资产目录中创建一个命名颜色,在IB中将主视图控制器的背景颜色设置为此颜色,并尝试更新背景颜色viewDidLoad,背景颜色不会改变。让其他人体验过这个吗?这是正常的行为吗?

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

2 个答案:

答案 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上进行测试)