我最近将XCode更新为7.0,并收到此警告消息:
Xcode.IDEInterfaceBuilder.Cocoa.NSObject.BroadSystemFontWeights
这是什么意思,我该如何摆脱它?
答案 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(_:),与故事板可能依赖的许多其他方法不同。