14 votes

UILabel dans UITableViewCell dans le fichier .xib ignore le mode sombre

J'ai mes propres UITableViewCells dans des fichiers .xib. Depuis Xcode 11 Beta 5 (également testé avec Beta 6), mes UILabels ignorent le Mode sombre et le texte est toujours noir. J'ai défini la couleur du texte de UILabel sur Par défaut (Couleur du libellé) donc cela devrait changer automatiquement. Est-ce que quelqu'un a une idée de ce qui ne va pas ?

Voici une capture d'écran : La première cellule est une cellule de base, la deuxième est une cellule personnalisée dans un fichier .xib.

entrer la description de l'image ici

13voto

Andrew Bennet Points 572

Ceci semble être un bug dans Xcode 11 (testé en bêta 7 et GM Seed 1) - J'ai signalé ce problème à Apple via Feedback Assistant (FB7198213). Le problème est réglé dans Xcode 11 GM Seed 2.

Pour les versions précédentes de Xcode 11, une solution de contournement pour le comportement incorrect des couleurs de libellé dynamiques consiste à réattribuer la couleur du libellé dans awakeFromNib() dans la sous-classe de la cellule de table. Par exemple :

class TableCell: UITableViewCell {

    @IBOutlet private weak var label: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        if #available(iOS 13.0, *) {
            // La couleur du texte du libellé était définie sur secondaryLabel dans l'éditeur XIB
            // mais nous la réattribuons à nouveau à secondaryLabel ici. Cela empêche
            // un bug où le libellé apparaît toujours dans sa variante de mode clair.
            label.textColor = .secondaryLabel
        }
    }
}

Réponse originale : Cette réponse initiale aborde le problème uniquement pour la couleur de libellé par défaut (c'est-à-dire principale)

Il semble y avoir un bug dans l'éditeur XIB de Xcode 11 (testé en bêta 7) concernant l'édition des couleurs de libellé. Lorsqu'une couleur de libellé est définie dans l'éditeur XIB sur "Couleur du libellé" (même si elle était déjà définie ainsi), le XML sous-jacent est modifié de manière à ce que le libellé apparaisse en noir même en mode sombre. En examinant la différence d'un fichier XIB entre la création d'un nouveau libellé, et après avoir défini explicitement la couleur de ce libellé sur "Couleur du libellé", on peut voir la différence.

Pour mon exemple simple, le XML du fichier XIB est passé de :

à :

Remarquez que la ligne a été supprimée. Ajouter manuellement cela corrige le comportement du libellé en mode sombre.

3voto

Loïc Gardiol Points 261

Problème similaire ici. Certaines couleurs dynamiques utilisées dans les XIB n'utilisent pas leur version sombre lorsque le mode sombre est activé.

Cela se produit à la fois dans le simulateur et sur de vrais appareils. Les couleurs apparaissent correctement lors de la simulation du mode sombre dans Xcode (Interface Builder).

La cible de déploiement de mon projet est iOS 10.

1voto

Alfred Woo Points 531

Xcode 11 GM Seed 2 qui a été publié aujourd'hui semble avoir corrigé le problème.

D'après les notes de publication:

Correction d'un problème où les couleurs système dans les fichiers XIB configurés pour être déployés avant iOS 13.0 ne s'adaptaient pas à l'apparence du système lors de l'exécution. (54362252)

0voto

Larry Ricker Points 51

@Andrew Bennet cela a fonctionné pour moi. Merci. J'ai dû mettre en œuvre une solution de contournement en Objective-C car cette partie de mon application est toujours en Objective-C.

- (void)awakeFromNib {
    [super awakeFromNib];
    if (@available(iOS 13.0, *)) {
        // La couleur du texte de l'étiquette a été définie sur secondaryLabel dans l'éditeur XIB
        // mais nous la réassignons à secondaryLabel ici. Cela évite
        // un bug où l'étiquette apparaît toujours dans sa variante de mode clair.
//        label.textColor = .secondaryLabel
        lblTitle.textColor = UIColor.secondaryLabelColor;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X