【问题标题】:Xcode IB Stupid WarningXcode IB 愚蠢警告
【发布时间】:2015-09-28 16:20:40
【问题描述】:

Xcode IB 再次以不必要的警告让开发人员感到沮丧:我似乎无法从我的 Xcode 项目中删除此警告。

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

编辑:

我已经剥离了我的大部分 .xib 以供公众查看,但仍然存在很少对象的错误。你可以在这里找到文件:https://www.dropbox.com/s/r2piuojr86dhlt9/MainMenu.xib?dl=0

【问题讨论】:

  • 您能否制作一个精简的示例项目来演示此警告?
  • @MichaelDautermann 我已经尝试通过逐个删除对象来隔离问题,但是在从文件中删除每个对象之前仍然会出现警告
  • 是的!这就是为什么我希望看到一个演示问题的示例项目,然后我可以尝试为您(以及其他所有人:-) 解决这个问题。去掉 xib 中除一个对象之外的所有内容(警告仍然出现)。
  • @MichaelDautermann 我已经分享了文件的链接
  • 谢谢...我将 xib 文件放入一个示例 Swift 项目中,但在构建时无法在我的 Xcode 7 中显示任何警告消息。不过还是在打猎。

标签: xcode macos cocoa


【解决方案1】:

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

在我的项目中,表视图列标题使用具有“中等”字体样式变化的系统字体,而不是针对 OS X 10.9+ 的项目中的常规字体。

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

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

【讨论】:

    【解决方案2】:

    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 以获取可用选项。

    【讨论】:

      猜你喜欢
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 2011-08-24
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多