Xcode NSObject.BroadSystemFontWeights警告消息的含义是什么?

Xcode NSObject.BroadSystemFontWeights警告消息的含义是什么?,xcode,swift,xcode7,Xcode,Swift,Xcode7,我最近将XCode更新为7.0,并收到以下警告消息: Xcode.IDEInterfaceBuilder.Cocoa.NSObject.BroadSystemFontWeights 这是什么意思?如何消除它?当我将带有系统字体的标签的字体权重设置为Semibold时,我遇到了相同的错误。这个重量适用于新系统字体(旧金山),但不适用于旧的Helvetica Neue,所以我猜这个错误意味着我们无法在旧操作系统上获得正确的重量 将字体更改为同样适用于Helvetica Neue的粗体字体已为我

我最近将XCode更新为7.0,并收到以下警告消息:

 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
,这在两种字体系列中都可用,则错误仍然存在。