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

What is the default background color of UITableViewCell in iOS 13?

提问人:Joshua 提问时间:7/24/2019 最后编辑:Joshua 更新时间:11/26/2019 访问量:11957

问:

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

我放置了一个断点并打印了.这是我得到的:willDisplayCell:forRowAtIndexPath:cell.backgroundColor

<UIDynamicSystemColor: 0x600000bf2c00; name = tableCellGroupedBackgroundColor>

这似乎是一个没有公共等价物的私有类。有什么建议可以解决这个问题吗?

iOS UITableView iOS13

评论

0赞 Orkhan Alikhanov 5/29/2021
那些想要查看系统颜色值的人,请查看此博客 noahgilmore.com/blog/dark-mode-uicolor-compatibility

答:

52赞 rmaddy 7/25/2019 #1

纯样式表格视图中的单元格用作其背景、标题文本和副标题文本。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)"
        }
    }
}

例子:

print(UIColor.secondarySystemGroupedBackground.lightDarkDescription)
print(UIColor.secondaryLabel.lightDarkDescription)
print(UIColor.green.lightDarkDescription)

输出:

<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 演示应用程序。

评论

0赞 Joshua 7/25/2019
明!非常感谢您的帮助!请问你的参考是什么?我无休止地寻找答案,却找不到任何有用的东西......因此,出于好奇,实现信息来源会很有趣。
2赞 rmaddy 7/25/2019
很大程度上是反复试验。上个月,我编写了一个简单的表视图应用程序,它使用该颜色作为行的背景,为每个 UIColor 常量提供一行。这让我可以在浅色和深色模式下看到所有颜色。然后,我将我在“通讯录”和“设置”应用中看到的颜色与我在测试应用中看到的颜色进行了比较。棘手的部分是许多预定义的颜色是部分透明的。
2赞 rmaddy 7/25/2019
@Joshua,我添加了一个指向我创建的应用程序的链接,以玩弄所有颜色。
0赞 Klaas 10/17/2019
有没有人更深入地挖掘并找出 OP 问题中的名字来自哪里?或者这只是在分组视图和普通表视图之间切换的另一种辅助颜色?tableCellGroupedBackgroundColor
1赞 Klaas 10/17/2019
至少在解析其颜色时,似乎考虑了特征集合。我得到不同的单元格背景颜色,这取决于在根级视图控制器或呈现的视图控制器中具有表视图。UIUserInterfaceLeveltableCellGroupedBackgroundColor
9赞 samwize 11/26/2019 #2

在 iOS 13 中,要支持深色模式,您可以将其用于单元格背景。secondarySystemGroupedBackground

Swift代码:

if #available(iOS 13.0, *) {
    cellBackgroundColor = .secondarySystemGroupedBackground
} else {
    cellBackgroundColor = .white
}

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

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