在调度队列中使用时,CGColor 在深色模式下无法正常运行

问题描述 投票:0回答:1

我有一个动态颜色 (

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]

有什么想法为什么会发生以及如何解决它吗?

ios darkmode cgcolor
1个回答
0
投票

这是因为短语

overrideUserInterfaceStyle = .dark
并没有立即引起反应:特征收集生效之前有一个延迟。

因此,您的第一个

print
发生在用户界面样式更改为.dark之前
,而您的第二个
print
发生在用户界面样式更改为
.dark之后
    

© www.soinside.com 2019 - 2024. All rights reserved.