iOS 13中UITableViewCell的默认背景颜色是什么?

Jos*_*hua 5 uitableview ios ios13

的默认背景UIColorUITableViewCell什么?我需要一个恒定的UIColor对象而不是RGB,因为我想在iOS 13中实现暗模式。(我找不到任何匹配的颜色,例如[UIColor systemBackgroundColor])。

我在处设置了一个断点willDisplayCell:forRowAtIndexPath:并打印cell.backgroundColor。这就是我得到的:

<UIDynamicSystemColor: 0x600000bf2c00; name = tableCellGroupedBackgroundColor>
Run Code Online (Sandbox Code Playgroud)

似乎是没有公共等效项目的私人班级。有什么建议如何针对这个目标吗?

rma*_*ddy 15

普通样式表视图中的单元格UIColor.systemBackground[Color]用作背景,UIColor.label[Color]标题文本和UIColor.secondaryLabel[Color]字幕文本。

对于分组样式表视图,单元格背景使用UIColor.secondarySystemGroupedBackground[Color],而表视图背景使用UIColor.systemGroupedBackground[Color]

所有这些都适用于亮/暗模式。

下面是一个有用的UIColor扩展,它允许您打印任何颜色的明暗描述。

extension UIColor {
    var lightDarkDescription: String {
        let lightTraits = UITraitCollection.init(userInterfaceStyle: .light)
        let darkTraits = UITraitCollection.init(userInterfaceStyle: .dark)
        let lightColor = self.resolvedColor(with: lightTraits)
        let darkColor = self.resolvedColor(with: darkTraits)
        if lightColor == darkColor {
            return self.description
        } else {
            return "\(self), light: \(lightColor), dark: \(darkColor)"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

例子:

print(UIColor.secondarySystemGroupedBackground.lightDarkDescription)
print(UIColor.secondaryLabel.lightDarkDescription)
print(UIColor.green.lightDarkDescription)
Run Code Online (Sandbox Code Playgroud)

输出:

<UIDynamicSystemColor:0x6000005a5d80; 名称= secondarySystemGroupedBackgroundColor>,浅色:UIExtendedGrayColorSpace 1 1,深色:UIExtendedSRGBColorSpace 0.109804 0.109804 0.117647 1
<UIDynamicSystemColor:0x6000005a5f00; 名称= secondaryLabelColor>,浅色:UIExtendedSRGBColorSpace 0.235294 0.235294 0.262745 0.6,深色:UIExtendedSRGBColorSpace 0.921569 0.921569 0.960784 0.6
UIExtendedSRGBColorSpace 0 1 0 1

如果有人想使用所有颜色,请在GitHub上查看我的SystemColors演示应用程序。

  • 很大程度上是反复试验。上个月,我编写了一个简单的表视图应用程序,其中每个 UIColor 常量都有一行,使用该颜色作为行的背景。这让我可以看到浅色和深色模式下的所有颜色。然后,我将“联系人”和“设置”应用程序中看到的颜色与我在测试应用程序中看到的颜色进行了比较。棘手的部分是许多预定义的颜色是部分透明的。 (2认同)
  • @Joshua我为我创建的应用程序添加了一个链接,以使用所有颜色进行播放。 (2认同)

sam*_*ize 7

在 iOS 13 中,为了支持深色模式,您可以使用secondarySystemGroupedBackground单元格背景。

斯威夫特代码:

if #available(iOS 13.0, *) {
    cellBackgroundColor = .secondarySystemGroupedBackground
} else {
    cellBackgroundColor = .white
}
Run Code Online (Sandbox Code Playgroud)

相应地,对于组表视图背景,您可以使用 (primary) systemGroupedBackground

新的语义颜色用于组,包含其他组(主要 -> 次要 -> 第三),并且不限于表视图。这是完全有道理的。我在这里写过它。