奇怪 XCode 7 个界面生成器警告
Weird XCode 7 Interface Builder warnings
我在 OSX 应用程序中为我的几个标签设置了字体特征(粗体、浅色),现在我收到这些警告:
.../MainMenu.xib:9:
Xcode.IDEInterfaceBuilder.Cocoa.NSObject.BroadSystemFontWeights
没有任何解释。当我点击警告时,通常甚至没有选择意味着的标签。有人可以阐明这些警告的含义以及如何摆脱它们吗?
这是从 Xcode 7 开始显示的警告,当 UI 元素(如标签或 table 视图列 header 使用的字体样式或变体不是适用于较早的 OSes(当然您的项目仍以它们为目标)。
在我的项目中,一个 table 视图列 header 使用的是具有 "medium" 字体样式变化的系统字体,而不是常规字体,在一个针对 OS X 的项目中10.9+.
奇怪的是我不得不重新启动 Xcode 因为 Interface Builder 拒绝更改控件的样式。可能是早期 7.0.1 Xcode 版本的一个小故障。
当前的答案几乎可以理解,但问题不在于字体样式在旧目标中不可用,而是 Xcode 没有正确处理它们,请参阅 full blog post 了解详细信息。
如果您想保留自己的样式,请使用带有自定义可检查项的自定义文本字段 属性。打开身份检查器并将自定义 class 设置为 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
}
}
}
如果您真的不关心样式,对所有文本使用常规粗细字体,它应该可以解决问题,请参阅我之前的 了解可用选项。
我在 OSX 应用程序中为我的几个标签设置了字体特征(粗体、浅色),现在我收到这些警告:
.../MainMenu.xib:9: Xcode.IDEInterfaceBuilder.Cocoa.NSObject.BroadSystemFontWeights
没有任何解释。当我点击警告时,通常甚至没有选择意味着的标签。有人可以阐明这些警告的含义以及如何摆脱它们吗?
这是从 Xcode 7 开始显示的警告,当 UI 元素(如标签或 table 视图列 header 使用的字体样式或变体不是适用于较早的 OSes(当然您的项目仍以它们为目标)。
在我的项目中,一个 table 视图列 header 使用的是具有 "medium" 字体样式变化的系统字体,而不是常规字体,在一个针对 OS X 的项目中10.9+.
奇怪的是我不得不重新启动 Xcode 因为 Interface Builder 拒绝更改控件的样式。可能是早期 7.0.1 Xcode 版本的一个小故障。
当前的答案几乎可以理解,但问题不在于字体样式在旧目标中不可用,而是 Xcode 没有正确处理它们,请参阅 full blog post 了解详细信息。
如果您想保留自己的样式,请使用带有自定义可检查项的自定义文本字段 属性。打开身份检查器并将自定义 class 设置为 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
}
}
}
如果您真的不关心样式,对所有文本使用常规粗细字体,它应该可以解决问题,请参阅我之前的