我有一个动态颜色 (
let myColor = UIColor.label
),其设计在浅色和深色模式下显示不同。
当我以编程方式设置深色主题,然后查询颜色的
cgColor
组件时,它会报告 [1.0, 1.0]。这是正确的,因为在深色模式下文本颜色预计为白色。
但是,当我从调度队列中检查它时,它报告 [0.0, 1.0],就像在浅色主题中一样。
这是一个最小的复制样本:
class ViewController: UIViewController {
let myColor: UIColor = .label
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.windows.forEach {
$0.overrideUserInterfaceStyle = .dark
}
if let color = myColor.cgColor.components {
print("initially \(color)")
DispatchQueue.main.async {
if let color = self.myColor.cgColor.components {
print("in queue \(color)")
}
}
}
}
}
输出:
initially [1.0, 1.0]
in queue [0.0, 1.0]
有什么想法为什么会发生以及如何解决它吗?
这是因为短语
overrideUserInterfaceStyle = .dark
并没有立即引起反应:特征收集生效之前有一个延迟。
因此,您的第一个
print
发生在用户界面样式更改为.dark
之前,而您的第二个
print
发生在用户界面样式更改为
.dark
之后。