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?
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.
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 .