web-dev-qa-db-ja.com

iOS 13のUITableViewCellのデフォルトの背景色は何ですか?

UIColorのデフォルトの背景UITableViewCellは何ですか? iOS 13でダークモードを実装したいため、RGBではなく定数UIColorオブジェクトが必要です([UIColor systemBackgroundColor]などの一致する色が見つかりませんでした)。

ブレークポイントをwillDisplayCell:forRowAtIndexPath:に配置し、cell.backgroundColorを出力しました。これは私が得たものです:

<UIDynamicSystemColor: 0x600000bf2c00; name = tableCellGroupedBackgroundColor>

パブリッククラスがないプライベートクラスのようです。これをターゲットにする方法の提案はありますか?

9
Joshua

プレーンスタイルのテーブルビューのセルは、背景に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; name = secondarySystemGroupedBackgroundColor>、ライト:UIExtendedGrayColorSpace 1 1、ダーク:UIExtendedSRGBColorSpace 0.109804 0.109804 0.117647 1
<UIDynamicSystemColor:0x6000005a5f00; name = 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のmy SystemColors デモアプリを参照してください。

22
rmaddy

IOS 13では、ダークモードをサポートするために、セルの背景にsecondarySystemGroupedBackgroundを使用できます。

Swiftコード:

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

同様に、グループテーブルビューの背景には、(プライマリ)systemGroupedBackgroundを使用できます。

新しいセマンティックカラーは、他のグループ(プライマリ->セカンダリ->ターシャリ)を含むグループ用であり、テーブルビューに限定されません。それは完全に理にかなっています。私はそれについて書きました ここ

1
samwize