NSObject.BroadSystemFontWeights警告消息是什么意思?

时间:2015-09-24 17:33:33

标签: xcode swift xcode7

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

 Xcode.IDEInterfaceBuilder.Cocoa.NSObject.BroadSystemFontWeights

enter image description here

这是什么意思,我该如何摆脱它?

2 个答案:

答案 0 :(得分:10)

当我将字体粗细设置为Semibold到具有系统字体的标签时,出现了同样的错误。这个重量可用于新系统字体(旧金山),但不适用于旧的Helvetica Neue,所以我猜这个错误意味着我们无法在旧操作系统上获得正确的权重。

将字体更改为可用于Helvetica Neue的重量,在我的情况下为Bold,我已经修复了错误。

答案 1 :(得分:2)

问题不在于改变系统字体的重量,问题在于Xcode没有正确处理这个 - 矛盾的声明,我知道,请参阅full blog post了解详细信息。有三种情况。

首先 - 明确排版并不重要,正常体重是可以接受的。然后坚持马克的答案并使用明确的正常体重。

第二 - 显性排版更可取,但在旧系统上可能会受到影响。这是现在的默认行为,Xcode只显示警告并在10.11之前的目标上使用常规字体。如果你使用自适应布局,一切都应该没问题。要摆脱警告,您只需在故事板检查器中设置更高的目标:

请注意,如果您的故事板为早期目标使用后备功能,它们可能会被禁用,这会导致问题 - 到目前为止我还没有遇到任何问题。

第三 - 显式排版是必须的。在这种情况下,您可以使用自定义textfield和自定义可检查属性。打开身份检查器并将自定义类设置为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。大胆的权重可能是因为它使用了略微不同的逻辑 - 自OS X 10.0起可用的boldSystemFontOfSize(_:),与故事板可能依赖的许多其他方法不同。