UIColor 动态提供程序块有时会收到错误的用户界面样式



我有一堆颜色正在更新以支持新的iOS 13暗模式。我正在使用新的动态提供程序块构造函数以编程方式使用它们。这里的问题是,有时使用userInterfaceStyle属性的错误值调用块,导致颜色返回错误的值(有时是深色而不是浅色,有时是浅色而不是深色(。

根据我的理解,我不需要监听这个新构造函数的traitCollection更改或任何类似内容。它应该自动完成(还是我错了?

有趣的是,我尝试通过资产目录使用一些虚拟颜色来执行此操作,但它也不起作用。还尝试使用一些新系统提供的动态颜色,如.systemBackgroundColor。它有时还可以解决颜色错误的问题。

if #available(iOS 13.0, *) {
return UIColor { (traitCollection: UITraitCollection) -> UIColor in
if traitCollection.userInterfaceStyle == .dark {
return darkColor
}
else {
return lightColor
}
}
}

那么,究竟应该发生什么呢?这应该像我预期的那样工作,还是我绝对需要在特定位置(例如viewWillLayoutSubviewstraitCollectionDidChange内部(分配颜色?

使用.resolvedColor(with: UITraitCollection)手动解析颜色。但是根据我从文档中的理解,我应该不需要像这样手动解决它。

好的,所以我找到了问题的根源。将动态颜色设置为navigationBarsearchBar时,请注意视图的barStyle属性。我正在使用.dark作为导航栏(以显示带有白色文本的状态栏(。这导致 UIColor 动态提供程序解析错误的颜色。将其更改为.default为我修复了它。

对于searchBar,我没有设置任何具体的东西。强迫它.default也修复了它。

最新更新