Dans viewDidLoad
, j'ai quelque chose comme ceci pour ajouter des attributs de texte à un UITextField
:
let textAttributes = [
NSForegroundColorAttributeName: UIColor.whiteColor(),
NSStrokeColorAttributeName: UIColor.blackColor(),
NSFontAttributeName: UIFont(name: "HelveticaNeue-CondensedBlack", size: 40)!,
NSStrokeWidthAttributeName: 1.0
]
self.textField.delegate = self
self.textField.defaultTextAttributes = textAttributes
self.textField.text = "Top text field"
Tous ces attributs semblent fonctionner correctement, sauf NSForegroundColorAttributeName
. Ce texte semble transparent. Est-ce un bug Swift?
Le texte est placé sur une image dans une UIScrollView
. Texte tel qu'il apparaît:
De Questions techniques QA1531 :
En effet, le signe de la valeur de NSStrokeWidthAttributeName est interprété comme un mode; il indique si la chaîne attribuée doit être rempli, caressé, ou les deux. Plus précisément, une valeur zéro affiche un remplissage uniquement, tandis qu'une valeur positive affiche uniquement un trait. Un négatif valeur permet d'afficher à la fois un fond et un trait.
Donc, avec votre réglage
NSStrokeWidthAttributeName: 1.0
la police est composée uniquement de traits et non remplie, ce qui donne une "police de contour". Vous aurez envie de définir
NSStrokeWidthAttributeName: -1.0
à la place, de sorte que la police soit remplie et.
Vous pouvez également trouver cette information si vous cliquez avec le bouton droit sur NSStrokeWidthAttributeName
dans Xcode pour accéder à la définition:
NSNumber contenant une valeur à virgule flottante, en pourcentage du point de police taille, par défaut 0: pas de trait; positif pour AVC seul, négatif pour contour et remplissage (une valeur typique pour le texte souligné serait 3.0)
Vous devez créer une NSAttributedString
avec vos attributs de texte, puis définir la propriété attributedText
du champ de texte:
textField.attributedText = NSAttributedString(string: "Top text field", attributes: textAttributes)