Semibold
时遇到了相同的错误。这种字重对于新的系统字体(San Francisco)是可用的,但对于旧的Helvetica Neue却不可用,所以我猜这个错误意味着在旧的操作系统上我们将无法获得正确的字重。Bold
,已经为我解决了这个错误。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. 加粗字体之所以有效,可能是因为它使用了稍微不同的逻辑 - 自从OS X 10.0以来就有boldSystemFontOfSize(_:),而许多其他方法则可能依赖于storyboard。
font-weight
属性设置为“中等粗细(Medium)”,而这种粗细在两种字体系列中都可用,那么错误仍然存在。 - Henrik