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种:

  1. 将 Table 颜色设置为 UIColor.labelColor。这将根据设备主题自动采用深色或浅色

  2. 另一种选择是在 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 颜色就是您的自定义颜色。