2015-06-20 19 views
26

Trong viewDidLoad, tôi có một cái gì đó như sau để thêm thuộc tính văn bản đến một UITextField:NSForegroundColorAttributeName không hoạt động trong 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" 

Tất cả những thuộc tính dường như hoạt động đúng, trừ NSForegroundColorAttributeName. Văn bản này xuất hiện trong suốt. Đây có phải là lỗi Swift không?

Văn bản đang được đặt trên một hình ảnh trong một UIScrollView. Văn bản khi nó xuất hiện:

Screen Shot

+9

Memacity của Udacity! – leopic

Trả lời

52

Từ Technical Q&A QA1531:

Điều này là do dấu của giá trị cho NSStrokeWidthAttributeName được hiểu là một chế độ; nó cho biết chuỗi được phân bổ có được điền, vuốt ve hay cả hai. Cụ thể, giá trị bằng không hiển thị chỉ điền, trong khi giá trị dương chỉ hiển thị hành trình. Giá trị âm cho phép hiển thị cả lần điền và nét.

Vì vậy, với thiết lập của bạn

NSStrokeWidthAttributeName: 1.0 

font được vuốt ve mà thôi và không điền, dẫn đến một "font phác thảo". Bạn sẽ muốn đặt

NSStrokeWidthAttributeName: -1.0 

thay vì để các phông chữ được vuốt ve điền.

Bạn có thể tìm thông tin mà còn nếu bạn chỉ huy-click vào NSStrokeWidthAttributeName trong Xcode để nhảy vào định nghĩa:

NSNumber chứa giá trị dấu chấm động, theo phần trăm điểm phông chữ kích thước, mặc định 0: không có Cú đánh; tích cực cho đột quỵ một mình, tiêu cực cho đột quỵ và điền (giá trị điển hình cho văn bản được nêu sẽ là 3.0)

+2

Ồ. Nó đã làm việc. Tôi đã tự hỏi về điều đó mãi mãi. – Ja5onHoffman

0

Bạn cần phải tạo một NSAttributedString với các thuộc tính văn bản của bạn và sau đó thiết lập các attributedText tài sản của trường văn bản:

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

Tôi đã thử điều đó. Điều tương tự. Hình ảnh được thêm ở trên để cho biết cách nó xuất hiện. – Ja5onHoffman

Các vấn đề liên quan