3

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

在情节提要中,我将标签的颜色设置为黑色(也尝试了默认颜色)。

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

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
            }

        }
    }

}

结果是:

在此处输入图像描述 在此处输入图像描述

4

4 回答 4

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
    }
    

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

希望这会有所帮助。

在此处输入图像描述

于 2019-10-19T19:52:01.663 回答
2

不知何故,集合视图中的标签无法按预期工作。我尝试了不同的配置,但都没有奏效。我最终改用按钮,它适用于我的情况。一旦我得到这个标签,我会更新我的答案。

于 2019-10-21T15:04:33.267 回答
0

如果使用默认标签颜色,则标签颜色为深色模式为白色,浅色模式为黑色。

如果您使用自定义颜色,那么人工颜色就是您的自定义颜色。

于 2021-03-03T12:36:16.170 回答
0

默认颜色在 iOS 13 中无法作为黑色使用,因为默认颜色已更改为 UIlabel 的颜色,而不是黑色。

设置背景颜色后尝试设置文本颜色。

于 2019-10-18T19:40:44.487 回答