web-dev-qa-db-fra.com

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

J'ai mon UITableViewCells personnalisé dans .xib des dossiers. Depuis Xcode 11 Beta 5 (également testé avec Beta 6), mon UILabels ignore le mode sombre et le texte est toujours noir. J'ai défini la couleur du texte UILabel sur Par défaut (Couleur de l'étiquette), cela devrait donc changer automatiquement. Quelqu'un at-il une idée de ce qui ne va pas?

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

enter image description here

14
patrickS

Cela semble être un bogue dans Xcode 11 (testé en version bêta 7 et GM Seed 1) - J'ai signalé ce problème avec Apple via Feedback Assistant (FB7198213). Le problème est corrigé 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 d'étiquettes dynamiques consiste à réaffecter la couleur d'étiquette dans awakeFromNib() dans la sous-classe de cellule de vue de tableau. Par exemple.:

class TableCell: UITableViewCell {

    @IBOutlet private weak var label: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        if #available(iOS 13.0, *) {
            // The label's textColor was set to secondaryLabel in the XIB editor
            // but we reassign it to secondaryLabel again here. This prevents
            // a bug where the label always appears in its light mode variant.
            label.textColor = .secondaryLabel
        }
    }
}

Réponse originale: Cette réponse originale ne résout le problème que pour la couleur d'étiquette par défaut (c.-à-d. Principale)

Il semble y avoir un bug dans XIB éditeur dans Xcode 11 (testé en version bêta 7) en ce qui concerne l'édition des couleurs des étiquettes. Lorsqu'une couleur d'étiquette est définie dans l'éditeur XIB sur "Couleur d'étiquette" (même si elle était déjà définie sur celle-ci), le XML sous-jacent est modifié de telle sorte que l'étiquette apparaît noire même en mode sombre. En examinant la différence d'un fichier XIB entre la création d'une nouvelle étiquette et après avoir explicitement défini la couleur de cette étiquette sur "Couleur d'étiquette", on peut voir la différence.

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

<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text here" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VKH-gX-gtO">
   <rect key="frame" x="20" y="15" width="71" height="21"/>
   <fontDescription key="fontDescription" type="system" pointSize="17"/>
   <nil key="textColor"/>
   <nil key="highlightedColor"/>
</label>

à:

<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text here" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VKH-gX-gtO">
   <rect key="frame" x="20" y="15" width="71" height="21"/>
   <fontDescription key="fontDescription" type="system" pointSize="17"/>
   <nil key="highlightedColor"/>
</label>

Notez que la ligne <nil key="textColor"/> a été éliminé. L'ajout manuel de ce dos corrige le comportement de l'étiquette en mode sombre.

13
Andrew Bennet

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 des appareils réels. Les couleurs do apparaissent correctement lors de la simulation du mode sombre dans Xcode (Interface Builder).

Mon objectif de déploiement de projet est iOS 10.

3
Loïc Gardiol

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

De note de version :

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

1
Alfred Woo

@Andrew Bennet, cela a fonctionné pour moi. Je vous remercie. J'ai dû implémenter le travail autour d'Objective-C car cette partie de mon application est toujours dans Objective-C.

- (void)awakeFromNib {
    [super awakeFromNib];
    if (@available(iOS 13.0, *)) {
        // The label's textColor was set to secondaryLabel in the XIB editor
        // but we reassign it to secondaryLabel again here. This prevents
        // a bug where the label always appears in its light mode variant.
//        label.textColor = .secondaryLabel
        lblTitle.textColor = UIColor.secondaryLabelColor;
    }
}
0
Larry Ricker