Xcode IB愚蠢警告

时间:2015-09-28 16:20:41

标签: xcode macos cocoa

Xcode IB再一次给开发人员带来了不必要的警告:我似乎无法从我的Xcode项目中删除此警告。

enter image description here

当双击警告时,它会显示我的MainMenu.xib文件,但没有提供导致问题的原因。有什么想法吗?

修改

我已经删除了很多我的.xib供公众查看,但仍然有很少的对象错误。您可以在此处找到该文件:https://www.dropbox.com/s/r2piuojr86dhlt9/MainMenu.xib?dl=0

2 个答案:

答案 0 :(得分:2)

这是从Xcode 7开始显示的警告,当标签或表视图列标题等UI元素使用旧版操作系统上可用的字体样式或变体时(当然,您的项目仍然以它们为目标)。

在我的项目中,一个表视图列标题使用了系统字体" medium"字体样式变体而不是针对OS X 10.9 +的项目的常规。

奇怪的是我不得不重新启动Xcode,因为Interface Builder拒绝改变控件的样式。可能是这个早期的7.0.1 Xcode版本的小故障。

无论如何,要么将每个控件样式设置为Regular,要么将项目目标更改为10.11,都应该修复警告。

答案 1 :(得分:0)

  

Xcode IB再一次给开发人员带来了不必要的警告。

同样感觉到这一点,直到我看到我的排版在10.10与10.11相比有何不同。有一件事是真的 - 消息是垃圾而没有指向有问题的故事板项目,请参阅P.S section of the post以获得半解决方案。

目前的答案几乎可以得到它,但问题不在于旧版目标中的字体样式不可用,而Xcode没有正确处理它们,有关详细信息,请参阅full blog post

如果要保留样式,请使用具有自定义可检查属性的自定义文本字段。打开身份检查器并将自定义类设置为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
        }
    }
}

如果您并不真正关心样式,请为所有文字使用常规权重字体,它应该可以解决问题,请参阅我之前的answer了解可用选项。