web-dev-qa-db-fra.com

NSForegroundColorAttributeName ne fonctionne pas dans Swift?

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:

Screen Shot

27
Ja5onHoffman

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)

53
Martin R

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)
0
lassej