3
votes

iOS UILabel textColor ne se met pas à jour en mode sombre

J'ai une vue de collection qui montre les plages horaires dans l'application. En mode sombre, il semble que le UILabel n'affiche pas la couleur du texte noir sur fond blanc.

Dans le storyboard, j'ai défini la couleur comme Noir (également essayé la couleur par défaut) pour l'étiquette.

Dans le code, lorsque l'utilisateur sélectionne la cellule,

extension UILabel{

    func toggleTheme(_ selected : Bool){
        if selected{
            if #available(iOS 13.0, *) {
                if self.traitCollection.userInterfaceStyle == .dark{
                    self.textColor = UIColor.black
                    self.backgroundColor = UIColor.white
                }else{
                    self.textColor = UIColor.white
                    self.backgroundColor = UIColor.black
                }
            } else {
                 self.textColor = UIColor.white
                 self.backgroundColor = UIColor.black
            }

        }else{
            if #available(iOS 13.0, *) {
                if self.traitCollection.userInterfaceStyle == .dark{
                    self.textColor = UIColor.white
                    self.backgroundColor = UIColor.black
                }else{
                    self.textColor = UIColor.black
                    self.backgroundColor = UIColor.white
                }
            } else {
                 self.textColor = UIColor.black
                 self.backgroundColor = UIColor.white
            }

        }
    }

}

et j'ai l'extension UILabel:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

   if let cell = collectionView.cellForItem(at: indexPath) as? TimeCell{
      cell.timeLabel.toggleTheme(true)
   }
 }


3 Réponses :


0
votes

La couleur par défaut ne fonctionnera pas comme un noir à partir d'iOS 13 car la couleur par défaut a été remplacée par la couleur de UIlabel au lieu du noir.

essayez de configurer la couleur du texte après avoir défini la couleur d'arrière-plan.


3 commentaires

J'ai essayé à la fois la couleur par défaut et l'autre couleur noire. Les deux n'ont pas fonctionné.


oui par défaut ne fonctionnera pas. pouvez-vous essayer self.backgroundColor = UIColor.black self.textColor = UIColor.white au lieu de self.textColor = UIColor.white self.backgroundColor = UIColor.black


Vous devez utiliser UIColor.label , etc. dans iOS 13, voir le lien que j'ai posté ci-dessus.



8
votes

Il existe 2 solutions pour s'assurer que la couleur UILabel est affichée en mode .dark :

  1. Définissez la couleur du tableau sur UIColor.labelColor . Cela adoptera automatiquement en fonction du thème de l'appareil sombre ou clair

  2. L'autre option est de définir la couleur dans xcassets et de fournir des variantes de couleur pour différents thèmes. Vous devez sélectionner Apparence comme Any, Dark pour obtenir l'option de fournir plusieurs couleurs. Reportez-vous à l'image ci-dessous. Avec défini, vous n'avez PAS besoin de vérifier le thème comme vous le faites dans l'extrait ci-dessous:

    if #available(iOS 13.0, *) {
        if self.traitCollection.userInterfaceStyle == .dark {
            self.textColor = UIColor.black
            self.backgroundColor = UIColor.white
        } else {
            self.textColor = UIColor.white
            self.backgroundColor = UIColor.black
        }
    } else {
        self.textColor = UIColor.white
        self.backgroundColor = UIColor.black
    }
    

Sinon, vous pouvez simplement définir self.textColor = UIColor (nommé: "MyBlackColor")

J'espère que cela vous aidera.

entrez la description de l'image ici


0 commentaires

2
votes

D'une manière ou d'une autre, l'étiquette de la vue collection ne fonctionne pas comme prévu. J'ai essayé différentes configurations et aucune n'a fonctionné. J'ai fini par utiliser le bouton à la place et cela a fonctionné dans mon cas. Je mettrai à jour ma réponse une fois que cela fonctionne avec une étiquette.


0 commentaires