iOS UILabel textColor 未在暗模式下更新

Tej*_*uri 3 swift ios13 xcode11 ios-darkmode

我有一个集合视图,显示应用程序中的时间段。在黑暗模式下,UILabel 似乎没有在白色背景上显示黑色文本颜色。

在故事板中,我已将标签的颜色设置为黑色(也尝试了默认颜色)。

在代码中,当用户选择单元格时,

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

   if let cell = collectionView.cellForItem(at: indexPath) as? TimeCell{
      cell.timeLabel.toggleTheme(true)
   }
 }
Run Code Online (Sandbox Code Playgroud)

我有 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
            }

        }
    }

}
Run Code Online (Sandbox Code Playgroud)

结果是:

在此处输入图片说明 在此处输入图片说明

Pan*_*rni 8

有两种解决方案可以确保UILabel.dark模式下显示颜色:

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

  2. 另一种选择是在 xcassets 中定义颜色并为不同的主题提供颜色变体。您需要选择外观为任何、深色才能获得提供多种颜色的选项。参考下图。定义后,您无需像在以下代码段中那样检查主题:

    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
    }
    
    Run Code Online (Sandbox Code Playgroud)

或者,您可以简单地设置 self.textColor = UIColor(named: "MyBlackColor")

希望这会有所帮助。

在此处输入图片说明