自从升级到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
}
}
}