Xcode NSObject.BroadSystemFontWeights警告消息的含义是什么?
我最近将XCode更新为7.0,并收到以下警告消息:Xcode NSObject.BroadSystemFontWeights警告消息的含义是什么?,xcode,swift,xcode7,Xcode,Swift,Xcode7,我最近将XCode更新为7.0,并收到以下警告消息: Xcode.IDEInterfaceBuilder.Cocoa.NSObject.BroadSystemFontWeights 这是什么意思?如何消除它?当我将带有系统字体的标签的字体权重设置为Semibold时,我遇到了相同的错误。这个重量适用于新系统字体(旧金山),但不适用于旧的Helvetica Neue,所以我猜这个错误意味着我们无法在旧操作系统上获得正确的重量 将字体更改为同样适用于Helvetica Neue的粗体字体已为我
Xcode.IDEInterfaceBuilder.Cocoa.NSObject.BroadSystemFontWeights
这是什么意思?如何消除它?当我将带有系统字体的标签的字体权重设置为
Semibold
时,我遇到了相同的错误。这个重量适用于新系统字体(旧金山),但不适用于旧的Helvetica Neue,所以我猜这个错误意味着我们无法在旧操作系统上获得正确的重量
将字体更改为同样适用于Helvetica Neue的粗体字体已为我修复了错误。问题不在于更改系统字体粗体,而在于Xcode未正确处理此问题–我知道,这与声明相矛盾,请参阅以获取详细信息。有三种情况 首先,明确的排版并不重要,常规的重量是可以接受的。然后坚持马可的答案,使用明确的规则权重
第二,显式排版更可取,但在较旧的系统上可能会受到影响。这是目前的默认行为,Xcode只是显示一个警告,并在10.11之前的目标上使用常规字体。如果您使用自适应布局,一切都会很好。要消除警告,只需在脚本检查器中设置更高的目标: 请注意,如果您的故事板对早期目标使用回退功能,它们可能会被禁用,这将导致问题–到目前为止,我还没有遇到任何问题
第三,明确的排版是必须的。在这种情况下,您可以使用具有自定义可检查属性的自定义textfield。打开identity inspector并将自定义类设置为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
}
}
}
另外,粗体字的工作原理可能是因为它使用了一种稍微不同的逻辑——这是从OS X 10.0开始就可以使用的,与故事板可能依赖的许多其他方法不同。请注意,如果您将字体重量设置为
Medium
,这在两种字体系列中都可用,则错误仍然存在。