NSToolbarItem: "Make sure this toolbar item has a valid frame/min/max size" ?



自从升级到Mac OS Sierra和新的XCode版本后,每次我为每一个NSToolbarItems启动应用程序时,我都会得到以下错误:

Example 1:
2016-09-29 12:46:58.659879 AppTest[] NSToolbarItem (<NSToolbarItem: >) had to adjust the size of <NSPopUpButton: > from {130, 26} to the expected size of {132, 27}. Make sure that this toolbar item view has a valid frame/min/max size. This is an app bug, please do not file a bug against AppKit or NSToolbar! Break on _NSToolbarAdjustedBorderedControlSizeBreakpoint
Example 2:
2016-09-29 12:46:58.666074 AppTest[] NSToolbarItem (<NSToolbarItem: >) had to adjust the size of <NSButton: > from {60, 25} to the expected size of {62, 27}. Make sure that this toolbar item view has a valid frame/min/max size. This is an app bug, please do not file a bug against AppKit or NSToolbar! Break on _NSToolbarAdjustedBorderedControlSizeBreakpoint

我试着在StoryBoard中改变大小,但没有运气,当我四处搜索时,我发现有几个人在新操作系统中也有这个问题,但没有有用的答案。

有人遇到同样的问题,有什么建议吗?

谢谢你,

Marc

无法在界面构建器中解决此问题。但是在NSToolbarItem的子类中重写minSize解决了这个问题。

- (NSSize)minSize
{
    if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_12) {
        /* Overriding this getter seems to be the only solution for runtime error logs like: NSToolbarItem (<APMRegularToolbarItem: 0x60e000039460>) had to adjust the size of <NSButton: 0x60f0001acce0> from {40, 25} to the expected size of {42, 27}. Make sure that this toolbar item view has a valid frame/min/max size. This is an app bug, please do not file a bug against AppKit or NSToolbar! Break on _NSToolbarAdjustedBorderedControlSizeBreakpoint
         */
        return NSMakeSize(42, 27);
    }
    else {
        return [super minSize];
    }
}

对于我来说,如上所述更改NSToolbaritem的最大值大小不起作用。但是改变它的最小大小就成功了。警告信息已消失

找到问题了!问题是,在Xcode的IB中,minSize字段仅单向绑定到XIB源。如果您在IB中更改NSToolbarItem的minSize,它会适当地保存它。但如果你重新打开面板,通过重新打开Xcode,重新打开项目或者只是重新打开属性面板,它会再次显示默认值。因此,此时的属性面板可能显示w127h25,尽管XIB文件的源文件(XML)显示的是w129h27(您上次尝试设置的任何值)。所以Xcode IB的属性面板中的minSize字段值设置不正确。这将导致令人困惑的情况,即在重新打开NSToolbarItem的Properties面板后保存,您的更改将再次被覆盖。这似乎是Xcode的一个bug。@Marius的答案解决了这个运行时,另一个解决方案是在设置minSize后不要再次打开NSToolbarItem属性。

我实际上在这个问题上浪费了更多的时间,但是摆脱警告是我的事情之一。对于我来说,无论我将工具栏按钮的最小/最大大小更改为什么,它都会抱怨大小不正确,误差为1或2个像素。我无意中发现了以下解决方案。我的按钮使用"常规"控制尺寸。在IB中,我将每个NSButton从常规更改为小,小更改为迷你,然后迷你更改为常规。然后我向上调整每个NSToolbarItem的最小高度,使其比最大值小两个。我不确定在这个过程中到底发生了什么。也许有一个更简单的解决方案,但我现在已经提交了我的故事板,我仍然屏住呼吸,希望警告不会再出现!

最初我尝试了这个(参见下面的更新思想):

http://cocoa-dev.apple.narkive.com/iSLaiCLR/strange-toolbar-item-error

总结:

选项是:

  • 如上所述更改最大大小,并使工具栏项可能在sierra前出现错误的大小;

  • 忽略警告,并在每个版本中显示所有内容;

还要注意:

我我以为我已经试过了,但没有成功,直到我意识到什么是成功发生:我编辑了值,然后关闭了IB中的工具栏编辑器。我现在意识到,这些改变并没有被保存下来;当我重新打开在工具栏编辑器中,旧的值仍然显示。运行一次打开的工具栏编辑器似乎做了一些改变。(是的,我试过不同阶段的清洁

2016年12月更新-------

由于某些原因,minSize仍然不时地随机变化。最后,我已经将所有这些NSToolBarItems链接到以下类,这已经为我修复了它:

    import Cocoa
    class ToolbarItemAvoidMinWarningIssue: NSToolbarItem {
    var widthT: CGFloat = 60
    var heightT: CGFloat = 27
    override var minSize: NSSize{
        get {
            return NSSize(width: widthT, height: heightT)
        }
        set {
            widthT = newValue.width
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新