NSObject.BroadSystemFontWeights 警告消息是什么意思?
What does NSObject.BroadSystemFontWeights warning message mean?
我最近将 XCode 更新到 7.0 并收到此警告消息:
Xcode.IDEInterfaceBuilder.Cocoa.NSObject.BroadSystemFontWeights
这是什么意思,我该如何摆脱它?
当我将字体粗细设置为 Semibold
到带有系统字体的标签时,我遇到了同样的错误。这个权重适用于新系统字体 (San Francisco) 但不适用于旧的 Helvetica Neue,所以我猜这个错误意味着我们不会在旧的 OS.
上获得正确的权重
将字体更改为也适用于 Helvetica Neue 的粗细,Bold
在我的情况下,已为我修复了错误。
问题不在于更改系统字体粗细,问题在于 Xcode 未正确处理此问题 - 我知道,这与声明相矛盾,请参阅 full blog post 了解详细信息。一共有三种情况。
首先——明确的排版并不重要,正常的重量是可以接受的。然后坚持 Marco 的回答并使用明确的常规权重。
其次——明确的排版更可取,但在旧系统上可能会受到影响。这是现在的默认行为,Xcode 只是显示警告并在 10.11 之前的目标上使用常规字体。如果你使用自适应布局,一切都应该没问题。要消除警告,您可以简单地在故事板检查器中设置更高的目标:
请注意,如果您的故事板对较早的目标使用回退功能,它们可能会被禁用,这会导致问题 – 到目前为止我还没有遇到过。
第三——明确的排版是必须的。在这种情况下,您可以将自定义文本字段与自定义可检查项 属性 结合使用。打开身份检查器并将自定义 class 设置为 TextField,首选字体粗细属性将显示在属性检查器中,设置所需的值,构建并享受结果。
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。粗体字之所以有效,可能是因为它使用了稍微不同的逻辑——boldSystemFontOfSize(_:) 自 OS X 10.0 起可用,这与情节提要可能依赖的许多其他方法不同。
我最近将 XCode 更新到 7.0 并收到此警告消息:
Xcode.IDEInterfaceBuilder.Cocoa.NSObject.BroadSystemFontWeights
这是什么意思,我该如何摆脱它?
当我将字体粗细设置为 Semibold
到带有系统字体的标签时,我遇到了同样的错误。这个权重适用于新系统字体 (San Francisco) 但不适用于旧的 Helvetica Neue,所以我猜这个错误意味着我们不会在旧的 OS.
将字体更改为也适用于 Helvetica Neue 的粗细,Bold
在我的情况下,已为我修复了错误。
问题不在于更改系统字体粗细,问题在于 Xcode 未正确处理此问题 - 我知道,这与声明相矛盾,请参阅 full blog post 了解详细信息。一共有三种情况。
首先——明确的排版并不重要,正常的重量是可以接受的。然后坚持 Marco 的回答并使用明确的常规权重。
其次——明确的排版更可取,但在旧系统上可能会受到影响。这是现在的默认行为,Xcode 只是显示警告并在 10.11 之前的目标上使用常规字体。如果你使用自适应布局,一切都应该没问题。要消除警告,您可以简单地在故事板检查器中设置更高的目标:
请注意,如果您的故事板对较早的目标使用回退功能,它们可能会被禁用,这会导致问题 – 到目前为止我还没有遇到过。
第三——明确的排版是必须的。在这种情况下,您可以将自定义文本字段与自定义可检查项 属性 结合使用。打开身份检查器并将自定义 class 设置为 TextField,首选字体粗细属性将显示在属性检查器中,设置所需的值,构建并享受结果。
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。粗体字之所以有效,可能是因为它使用了稍微不同的逻辑——boldSystemFontOfSize(_:) 自 OS X 10.0 起可用,这与情节提要可能依赖的许多其他方法不同。