iOS UILabel textColor 在深色模式下不更新
iOS UILabel textColor not updating in dark mode
我有一个集合视图,它显示了应用程序中的时间段。在深色模式下,UILabel 似乎没有显示白底黑字。
在情节提要中,我将标签的颜色设置为黑色(也尝试了默认颜色)。
在代码中,当用户 select 单元格时,
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let cell = collectionView.cellForItem(at: indexPath) as? TimeCell{
cell.timeLabel.toggleTheme(true)
}
}
我有 UILabel 扩展:
extension UILabel{
func toggleTheme(_ selected : Bool){
if selected{
if #available(iOS 13.0, *) {
if self.traitCollection.userInterfaceStyle == .dark{
self.textColor = UIColor.black
self.backgroundColor = UIColor.white
}else{
self.textColor = UIColor.white
self.backgroundColor = UIColor.black
}
} else {
self.textColor = UIColor.white
self.backgroundColor = UIColor.black
}
}else{
if #available(iOS 13.0, *) {
if self.traitCollection.userInterfaceStyle == .dark{
self.textColor = UIColor.white
self.backgroundColor = UIColor.black
}else{
self.textColor = UIColor.black
self.backgroundColor = UIColor.white
}
} else {
self.textColor = UIColor.black
self.backgroundColor = UIColor.white
}
}
}
}
结果是:
从 iOS 13 开始,默认颜色将不再是黑色,因为默认颜色已更改为 UIlabel 的颜色,而不是黑色。
尝试在设置背景颜色后设置文本颜色。
UILabel
颜色在.dark
模式下显示的解决方案有2种:
将 Table 颜色设置为 UIColor.labelColor
。这将根据设备主题自动采用深色或浅色
另一种选择是在 xcassets 中定义颜色并为不同的主题提供颜色变体。您需要 select Appearance as Any, Dark 才能获得提供多种颜色的选项。参考下图。定义后,您无需像在下面的代码片段中那样检查主题:
if #available(iOS 13.0, *) {
if self.traitCollection.userInterfaceStyle == .dark {
self.textColor = UIColor.black
self.backgroundColor = UIColor.white
} else {
self.textColor = UIColor.white
self.backgroundColor = UIColor.black
}
} else {
self.textColor = UIColor.white
self.backgroundColor = UIColor.black
}
或者您可以简单地设置 self.textColor = UIColor(named: "MyBlackColor")
希望这会有所帮助。
不知何故,集合视图中的标签未按预期工作。我尝试了不同的配置,none 成功了。我最终改用按钮,它在我的情况下有效。一旦我使用标签,我将更新我的答案。
如果您使用默认标签颜色,深色模式的标签颜色为白色,浅色模式的标签颜色为黑色。
如果您使用自定义颜色,则 labor 颜色就是您的自定义颜色。
我有一个集合视图,它显示了应用程序中的时间段。在深色模式下,UILabel 似乎没有显示白底黑字。
在情节提要中,我将标签的颜色设置为黑色(也尝试了默认颜色)。
在代码中,当用户 select 单元格时,
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let cell = collectionView.cellForItem(at: indexPath) as? TimeCell{
cell.timeLabel.toggleTheme(true)
}
}
我有 UILabel 扩展:
extension UILabel{
func toggleTheme(_ selected : Bool){
if selected{
if #available(iOS 13.0, *) {
if self.traitCollection.userInterfaceStyle == .dark{
self.textColor = UIColor.black
self.backgroundColor = UIColor.white
}else{
self.textColor = UIColor.white
self.backgroundColor = UIColor.black
}
} else {
self.textColor = UIColor.white
self.backgroundColor = UIColor.black
}
}else{
if #available(iOS 13.0, *) {
if self.traitCollection.userInterfaceStyle == .dark{
self.textColor = UIColor.white
self.backgroundColor = UIColor.black
}else{
self.textColor = UIColor.black
self.backgroundColor = UIColor.white
}
} else {
self.textColor = UIColor.black
self.backgroundColor = UIColor.white
}
}
}
}
结果是:
从 iOS 13 开始,默认颜色将不再是黑色,因为默认颜色已更改为 UIlabel 的颜色,而不是黑色。
尝试在设置背景颜色后设置文本颜色。
UILabel
颜色在.dark
模式下显示的解决方案有2种:
将 Table 颜色设置为
UIColor.labelColor
。这将根据设备主题自动采用深色或浅色另一种选择是在 xcassets 中定义颜色并为不同的主题提供颜色变体。您需要 select Appearance as Any, Dark 才能获得提供多种颜色的选项。参考下图。定义后,您无需像在下面的代码片段中那样检查主题:
if #available(iOS 13.0, *) { if self.traitCollection.userInterfaceStyle == .dark { self.textColor = UIColor.black self.backgroundColor = UIColor.white } else { self.textColor = UIColor.white self.backgroundColor = UIColor.black } } else { self.textColor = UIColor.white self.backgroundColor = UIColor.black }
或者您可以简单地设置 self.textColor = UIColor(named: "MyBlackColor")
希望这会有所帮助。
不知何故,集合视图中的标签未按预期工作。我尝试了不同的配置,none 成功了。我最终改用按钮,它在我的情况下有效。一旦我使用标签,我将更新我的答案。
如果您使用默认标签颜色,深色模式的标签颜色为白色,浅色模式的标签颜色为黑色。
如果您使用自定义颜色,则 labor 颜色就是您的自定义颜色。