UIColor 动态提供程序块有时会收到错误的 userInterfaceStyle
UIColor dynamic provider block receives wrong userInterfaceStyle sometimes
我有一堆颜色正在更新以支持新的 iOS 13 深色模式。我通过新的动态提供程序块构造函数以编程方式使用它们。这里的问题是有时块被调用时 userInterfaceStyle
属性 的错误值,导致颜色 return 错误的值(有时暗而不是亮,有时亮而不是黑暗)。
根据我的理解,我不需要使用这个新构造函数来监听 traitCollection
更改或任何类型的内容。它应该自动执行(或者我错了吗?)。
这里有趣的是,我尝试通过资产目录使用一些虚拟颜色来做到这一点,但它也不起作用。还尝试使用一些新系统提供的动态颜色,如 .systemBackgroundColor。有时也会解决颜色错误的问题。
if #available(iOS 13.0, *) {
return UIColor { (traitCollection: UITraitCollection) -> UIColor in
if traitCollection.userInterfaceStyle == .dark {
return darkColor
}
else {
return lightColor
}
}
}
那么,究竟应该发生什么?这应该像我期望的那样工作,还是我绝对需要在特定位置分配颜色(比如 viewWillLayoutSubviews
或 traitCollectionDidChange
内)?
使用 .resolvedColor(with: UITraitCollection)
手动解决颜色问题。但是根据我从文档中了解到的,我应该不需要像这样手动解决它。
好的,所以我找到了问题的根源。将动态颜色设置为 navigationBar
或 searchBar
时,请注意视图的 barStyle
属性。我对导航栏使用 .dark
(以显示带有白色文本的状态栏)。这会导致 UIColor 动态提供程序解析错误的颜色。将其更改为 .default
为我修复了它。
对于 searchBar
,我没有设置任何特定内容。强制它 .default
也修复了它。
我有一堆颜色正在更新以支持新的 iOS 13 深色模式。我通过新的动态提供程序块构造函数以编程方式使用它们。这里的问题是有时块被调用时 userInterfaceStyle
属性 的错误值,导致颜色 return 错误的值(有时暗而不是亮,有时亮而不是黑暗)。
根据我的理解,我不需要使用这个新构造函数来监听 traitCollection
更改或任何类型的内容。它应该自动执行(或者我错了吗?)。
这里有趣的是,我尝试通过资产目录使用一些虚拟颜色来做到这一点,但它也不起作用。还尝试使用一些新系统提供的动态颜色,如 .systemBackgroundColor。有时也会解决颜色错误的问题。
if #available(iOS 13.0, *) {
return UIColor { (traitCollection: UITraitCollection) -> UIColor in
if traitCollection.userInterfaceStyle == .dark {
return darkColor
}
else {
return lightColor
}
}
}
那么,究竟应该发生什么?这应该像我期望的那样工作,还是我绝对需要在特定位置分配颜色(比如 viewWillLayoutSubviews
或 traitCollectionDidChange
内)?
使用 .resolvedColor(with: UITraitCollection)
手动解决颜色问题。但是根据我从文档中了解到的,我应该不需要像这样手动解决它。
好的,所以我找到了问题的根源。将动态颜色设置为 navigationBar
或 searchBar
时,请注意视图的 barStyle
属性。我对导航栏使用 .dark
(以显示带有白色文本的状态栏)。这会导致 UIColor 动态提供程序解析错误的颜色。将其更改为 .default
为我修复了它。
对于 searchBar
,我没有设置任何特定内容。强制它 .default
也修复了它。