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

UIView's color cannot be changed programmatically after setting named color

即使你创建一个新的单视图项目(Xcode 9.2),在资产目录中创建一个命名颜色,在 IB 中将主视图控制器的背景颜色设置为该颜色,然后尝试更新viewDidLoad中的背景色,背景色不会改变。其他人有过这种经历吗?这是正常行为吗?

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

超级有趣,你是对的,它没有按预期改变颜色值。在 super class 中设置 IB 属性时肯定会有一些延迟。在 DispatchQueue.main.async 中包装颜色变化使其在 viewDidLoad 中工作。可能是因为此代码将在 super class 对 IB 属性执行的任何操作之后最后处理。希望这能解决问题。

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

同样在 viewDidLayoutSubviews 和 viewDidAppear 中它可以在没有 DispatchQueue 的情况下工作,但与 viewWillAppear 中的 viewDidLoad 具有相同的行为,但没有按预期工作。

这已在 iOS 13 中得到修复(在 iOS 13 上使用 Xcode 11 beta 4 测试构建)