NSToolbar - 工具栏空间项目 - 打破默认约束

7

如果我从应用程序中更改NSToolbar的大小,例如通过缩小大小、图标和文本,该应用程序会出现不满足约束条件的错误(尝试关闭自动布局或让应用程序生成其布局)。

我的窗口包括一个工具栏和左/右两个视图。

[81687:303] Unable to simultaneously satisfy constraints:
(
    "<NSAutoresizingMaskLayoutConstraint:0x100635620 h=--& v=--& V:[NSToolbarItemViewer:0x101b4d930(5)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x100634b30 h=--& v=-&- V:|-(11)-[_NSToolbarSpace:0x101b49a00]   (Names: '|':NSToolbarItemViewer:0x101b4d930 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x100634ad0 h=--& v=-&- V:[_NSToolbarSpace:0x101b49a00]-(12)-|   (Names: '|':NSToolbarItemViewer:0x101b4d930 )>"
)

Will attempt to recover by breaking constraint 
<NSAutoresizingMaskLayoutConstraint:0x100634b30 h=--& v=-&- V:|-(11)-[_NSToolbarSpace:0x101b49a00]   (Names: '|':NSToolbarItemViewer:0x101b4d930 )>

Set the NSUserDefault NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints to YES to have -[NSWindow visualizeConstraints:] automatically called when this happens.  And/or, break on objc_exception_throw to catch this in the debugger.

当我看到约束错误时

enter image description here

编辑:看起来“工具栏空间项”破坏了约束,如果我将其移除,它就可以正常运行。

2个回答

4
看起来像是一个 Bug,我最终添加了自己的空间项,使用一个空白的 NSView。

1
我曾经遇到过类似的问题。解决方法是从“默认工具栏”和“允许的工具栏项目”中删除所有的弹性空间。当我再次从对象浏览器中添加“弹性空间”时,警告消失了。 - Besi
是的,看起来这似乎是那些永远不会被修复的错误之一。 - Duck
根据我的经验,Flexible Space 可以按照 @Besi 指出的方法进行修复。然而,Space 项目每当被添加回默认工具栏时都会导致约束冲突。 - lightpen

3
我遇到了类似的问题。解决方法是从“默认工具栏”和“允许的工具栏项目”中删除所有的弹性空间。当我再次从对象浏览器添加“弹性空间”时,警告消失了。
在我的 Git diff 中,我看到结构似乎有所改变:

git diff


1
添加了Flexible Space后,仍然不起作用,对象浏览器中出现错误。 - Alexander B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接