2015-09-24 21 views

Trả lời

10

Tôi gặp lỗi tương tự khi tôi đặt trọng số phông chữ thành Semibold thành nhãn có phông chữ hệ thống. Trọng lượng này có sẵn cho phông chữ hệ thống mới (San Francisco) nhưng không dành cho Helvetica Neue cũ, vì vậy tôi đoán rằng lỗi đó có nghĩa là chúng tôi sẽ không nhận được trọng lượng phù hợp trên hệ điều hành cũ hơn.

Thay đổi phông chữ thành trọng lượng có sẵn cũng cho Helvetica Neue, Bold trong trường hợp của tôi, đã sửa lỗi cho tôi.

+4

Lưu ý rằng nếu bạn đặt trọng số phông chữ thành 'Phương tiện', có sẵn trong cả hai họ phông chữ, lỗi vẫn tồn tại. – Henrik

2

Vấn đề không phải với việc thay đổi trọng lượng phông chữ hệ thống, vấn đề là với Xcode không xử lý câu lệnh đúng - mâu thuẫn này, tôi biết, xem full blog post để biết chi tiết. Có ba kịch bản.

Kiểu chữ rõ ràng đầu tiên không quan trọng, trọng lượng thông thường có thể chấp nhận được. Sau đó gắn bó với câu trả lời của Marco và sử dụng trọng lượng thường xuyên rõ ràng.


Kiểu chữ rõ ràng thứ hai thích hợp hơn, nhưng có thể bị xâm phạm trên các hệ thống cũ hơn. Đây là hành vi mặc định ngay bây giờ, Xcode chỉ hiển thị cảnh báo và sử dụng phông chữ thông thường trên các mục tiêu trước 10.11. Nếu bạn sử dụng bố trí thích ứng, mọi thứ sẽ ổn. Để thoát khỏi cảnh báo, bạn chỉ có thể đặt mục tiêu cao hơn trong thanh tra kịch bản:

Lưu ý, nếu kịch bản của bạn sử dụng tính năng dự phòng cho các mục tiêu trước đó, họ có thể trở thành tàn tật, mà sẽ gây ra vấn đề - Tôi thiên đường 't đi qua bất kỳ cho đến nay.


Kiểu chữ rõ ràng thứ ba là phải. Trong trường hợp này, bạn có thể sử dụng trường văn bản tùy chỉnh với thuộc tính có thể kiểm tra tùy chỉnh. Mở trình kiểm tra nhận dạng và đặt lớp tùy chỉnh thành TextField, thuộc tính trọng số phông chữ ưa thích sẽ hiển thị trong trình kiểm tra thuộc tính, đặt giá trị bắt buộc, tạo và tận hưởng kết quả.

import AppKit 

@IBDesignable public class TextField: NSTextField 
{ 
    @IBInspectable public var preferredFontWeight: Int = 0 

    override public func awakeFromNib() { 
     if #available(OSX 10.11, *) { 
      return 
     } 

     guard 
     let weight: Int = self.preferredFontWeight where weight > 0, 
     let font: NSFont = self.font, 
     let name: String = font.familyName, 
     let manager: NSFontManager = NSFontManager.sharedFontManager() else { 
      return 
     } 

     // Full details here – https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSFontManager_Class/#//apple_ref/occ/instm/NSFontManager/convertWeight:ofFont: 
     // 
     // 1 – ultralight 
     // 2 – thin 
     // 3 – light, extralight 
     // 4 – book 
     // 5 – regular, display 
     // 6 – medium 
     // 7 – demi, demibold 
     // 8 – semi, semibold 
     // 9 – bold 
     // 10 – extra, extrabold 
     // 11 – heavy 
     // 12 – black 
     // 13 – ultrablack 
     // 14 – extrablack 

     if let font: NSFont = manager.fontWithFamily(name, traits: manager.traitsOfFont(font), weight: weight, size: font.pointSize) { 
      self.font = font 
     } 
    } 
} 

P.S. Trọng lượng in đậm hoạt động có thể vì nó sử dụng logic hơi khác - có boldSystemFontOfSize(_:) có sẵn kể từ OS X 10.0, không giống như nhiều phương pháp khác, mà cốt truyện có thể dựa vào.

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