web-dev-qa-db-fra.com

Le texte d'espace réservé UITextField est illisible en mode sombre iOS13

UITextField a un .placeholder propriété text, pour afficher des informations avant que du texte ne soit ajouté au champ, jusqu'à présent, il a toujours été clair et visible, mais en iOS13 le mode sombre a été introduit et maintenant le texte d'espace réservé est pratiquement illisible dans un UITextField blanc (je fais explicitement il blanc via .backgroundColor = [UIColor whiteColor]).

Ma question est, quelles sont les solutions pratiques pour résoudre ce problème tout au long de mon projet, je pourrais changer manuellement la couleur de l'espace réservé sur n'importe quel UITextField manuellement, en définissant simplement une chaîne attributedPlaceholder, qui peut prendre un certain temps, existe-t-il un moyen désactiver les paramètres du mode sombre uniquement sur UITextFields spécifiquement mais pas pour d'autres éléments?

5
Albert Renshaw

Je considérerais de ne pas définir explicitement l'arrière-plan du champ de texte sur blanc.

Vous pouvez prendre en charge de manière plus robuste le mode sombre et clair en utilisant les couleurs des éléments d'interface utilisateur décrites ici: https://developer.Apple.com/documentation/uikit/uicolor/ui_element_colors

Pour l'un de mes champs de texte, j'ai fait quelque chose comme ceci:

if #available(iOS 13, *) {
    self.searchBarTextField.textColor = UIColor.label
    self.searchBarTextField.backgroundColor = UIColor.secondarySystemBackground
} else {
    self.searchBarTextField.backgroundColor = UIColor(white: 1.0, alpha: 1.0)
}

À partir du code ci-dessus, l'arrière-plan de votre champ de texte changera dynamiquement lorsque l'utilisateur changera son paramètre de mode clair vs sombre. Et la couleur du texte changera avec elle. Et par espace réservé, la couleur du texte sera gérée par le système d'exploitation. Vous pouvez remplacer si vous en avez besoin: https://developer.Apple.com/documentation/uikit/uicolor/3173134-placeholdertext

1
Albert Tong

Si vous ne voulez pas forcer votre application complète en mode lumière de la manière la plus simple

Vous pouvez simplement ajouter placeholderTextColor à votre composant TextInput

Fonctionne pour moi ✌️

0
Rostyslav Broslavskyi