2015-06-20 16 views
26

W viewDidLoad, mam coś jak następuje dodanie atrybutów tekstu do UITextField:NSForegroundColorAttributeName nie działa w 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" 

Wszystkie te cechy wydają się działać poprawnie, z wyjątkiem NSForegroundColorAttributeName. Ten tekst wydaje się przezroczysty. Czy to jest błąd Swift?

Tekst jest umieszczany na obrazku w postaci UIScrollView. Tekst zamieszczony:

Screen Shot

+9

MemeApp! – leopic

Odpowiedz

52

Od Technical Q&A QA1531:

Dzieje się tak, ponieważ znak wartości dla NSStrokeWidthAttributeName jest interpretowany jako tryb; wskazuje, czy przypisany ciąg ma zostać wypełniony, obrysowany lub oba. W szczególności wartość zerowa wyświetla tylko wypełnienie, podczas gdy wartość dodatnia wyświetla tylko obrys. Wartość ujemna umożliwia wyświetlanie wypełnienia i obrysu.

Więc z ustawieniami

NSStrokeWidthAttributeName: 1.0 

czcionka jest wypełniony tylko pogłaskał, a nie, co skutkuje "font zarys". Będziemy chcieli, aby ustawić

NSStrokeWidthAttributeName: -1.0 

zamiast tak, że czcionka jest pogłaskał i wypełniony.

Można znaleźć te informacje również jeśli Command na NSStrokeWidthAttributeName w Xcode, aby przejść do definicji:

NSNumber zawierający wartość zmiennoprzecinkową w procentach punktu czcionki rozmiar, domyślnie 0: brak uderzenie; dodatni tylko dla suwu, ujemny dla obrysu i wypełnienia (typowa wartość dla zakreślonego tekstu to 3,0)

+2

Wow. Zadziałało. Zastanawiam się o tym na zawsze. – Ja5onHoffman

0

Musisz utworzyć NSAttributedString ze swoich atrybutów tekstowych, a następnie ustawić właściwość attributedText pola tekstowego:

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

Próbowałem tego. Ta sama rzecz. Zdjęcie dodane powyżej, aby pokazać, jak się pojawia. – Ja5onHoffman

Powiązane problemy