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

5

我最近将XCode升级到7.0版本,出现了以下警告信息:

 Xcode.IDEInterfaceBuilder.Cocoa.NSObject.BroadSystemFontWeights

在这里输入图片描述

这是什么意思?如何去除它?

2个回答

10
我在将系统字体的标签设置为Semibold时遇到了相同的错误。这种字重对于新的系统字体(San Francisco)是可用的,但对于旧的Helvetica Neue却不可用,所以我猜这个错误意味着在旧的操作系统上我们将无法获得正确的字重。
改变字体为旧的Helvetica Neue也可用的字重,比如我的情况下使用Bold,已经为我解决了这个错误。

4
请注意,如果将字体的font-weight属性设置为“中等粗细(Medium)”,而这种粗细在两种字体系列中都可用,那么错误仍然存在。 - Henrik

2
问题不在于改变系统字体的粗细,而在于Xcode没有正确处理这个问题——虽然这是矛盾的陈述,但请参见完整的博客文章了解详情。有三种情况。
第一种——明确的排版并不重要,常规字体粗度可接受。然后遵循Marco的回答,使用明确的常规粗度即可。
第二种——虽然明确的排版更好,但可以在旧系统上妥协。这是目前的默认行为,Xcode只是显示一个警告,并在早期的目标上使用常规字体。如果您使用自适应布局,则一切都应该没问题。要摆脱警告,您可以在storyboard inspector中简单地设置更高的目标:

请注意,如果您的storyboard针对较早的目标使用备用功能,则它们可能会被禁用,这将导致问题——到目前为止,我还没有遇到过这些问题。
第三种——明确的排版必须存在。在这种情况下,您可以使用带有自定义可检查属性的自定义文本字段。打开identity inspector并将自定义类设置为TextField,优选字体重量属性将显示在attribute inspector中,请设置所需的值,构建并享受结果。
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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接