2015-06-20 11 views
26

In viewDidLoad, ho qualcosa di simile alla seguente per aggiungere testo attribuisce a un UITextField:NSForegroundColorAttributeName non funziona in Swift?

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" 

Tutti questi attributi sembrano funzionare correttamente, ad eccezione NSForegroundColorAttributeName. Questo testo sembra trasparente. È un bug di Swift?

Il testo viene posizionato su un'immagine in un UIScrollView. Testo come appare:

Screen Shot

+9

di Udacity MemeApp! – leopic

risposta

52

Da Technical Q&A QA1531:

Questo perché il segno del valore per NSStrokeWidthAttributeName viene interpretato come una modalità; indica se la stringa attribuita deve essere compilata, accarezzata o entrambe. In particolare, un valore zero visualizza solo un riempimento, mentre un valore positivo visualizza solo un tratto. Un valore negativo consente di visualizzare sia un riempimento che una traccia.

Quindi, con l'impostazione di

NSStrokeWidthAttributeName: 1.0 

il font è accarezzò riempito solo e non, con un conseguente "font outline". Ti consigliamo di impostare

NSStrokeWidthAttributeName: -1.0 

invece in modo che il carattere è accarezzò e pieno.

Si possono trovare le informazioni anche se il tasto Comando su NSStrokeWidthAttributeName in Xcode per passare alla definizione:

NSNumber contenente valore in virgola mobile, in percentuale del punto carattere dimensioni, default 0: no ictus; positiva per ictus da solo, negativo per tratto e del riempimento (un valore tipico per il testo delineato sarebbe 3,0)

+2

Wow. Ha funzionato. Me lo sono chiesto per sempre. – Ja5onHoffman

0

È necessario creare un NSAttributedString con i tuoi attributi di testo e quindi impostare la proprietà attributedText del campo di testo:

textField.attributedText = NSAttributedString(string: "Top text field", attributes: textAttributes) 
+0

L'ho provato. Stessa cosa. Immagine aggiunta sopra per mostrare come appare. – Ja5onHoffman

Problemi correlati