web-dev-qa-db-fra.com

Quelle est la couleur d'arrière-plan par défaut de UITableViewCell dans iOS 13?

Quel est l'arrière-plan par défaut UIColor de UITableViewCell? J'ai besoin d'un objet UIColor constant plutôt que RVB car je souhaite implémenter le mode sombre dans iOS 13. (Je n'ai trouvé aucune couleur correspondante telle que [UIColor systemBackgroundColor]).

J'ai placé un point d'arrêt à willDisplayCell:forRowAtIndexPath: et imprimé cell.backgroundColor. Voici ce que j'ai obtenu:

<UIDynamicSystemColor: 0x600000bf2c00; name = tableCellGroupedBackgroundColor>

Cela ressemble à une classe privée sans équivalent public. Des suggestions sur la façon de cibler cela?

9
Joshua

Les cellules dans une vue de table de style simple utilisent UIColor.systemBackground[Color] pour leur parcours, UIColor.label[Color] pour le texte du titre et UIColor.secondaryLabel[Color] pour le texte des sous-titres.

Pour une vue de table de style groupé, l'arrière-plan de la cellule utilise UIColor.secondarySystemGroupedBackground[Color] et l'arrière-plan de la vue tableau utilise UIColor.systemGroupedBackground[Color].

Tous ces éléments s'adaptent au mode clair/sombre.

Vous trouverez ci-dessous une extension UIColor utile qui vous permet d'imprimer la description claire et sombre de n'importe quelle couleur.

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)"
        }
    }
}

Exemples:

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

Production:

<UIDynamicSystemColor: 0x6000005a5d80; name = secondarySystemGroupedBackgroundColor>, clair: UIExtendedGrayColorSpace 1 1, foncé: UIExtendedSRGBColorSpace 0.109804 0.109804 0.117647 1
<UIDynamicSystemColor: 0x6000005a5f00; name = secondaryLabelColor>, clair: UIExtendedSRGBColorSpace 0,235294 0,235294 0,262745 0,6, sombre: UIExtendedSRGBColorSpace 0,921569 0,9151569 0,960784 0,6
UIExtendedSRGBColorSpace 0 1 0 1

Si quelqu'un veut jouer avec toutes les couleurs, consultez mon SystemColors application de démonstration sur GitHub.

22
rmaddy

Dans iOS 13, pour prendre en charge le mode sombre, vous pouvez utiliser secondarySystemGroupedBackground comme arrière-plan de cellule.

Le code Swift:

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

De même, pour l'arrière-plan de la vue de table de groupe, vous pouvez utiliser (principal) systemGroupedBackground.

Les nouvelles couleurs sémantiques sont pour les groupes, contenant d'autres groupes (primaire -> secondaire -> tertiaire), et ne se limitant pas aux vues de table. C'est parfaitement logique. J'ai écrit à ce sujet ici .

1
samwize