如何显式设置已经有约束规定其最小宽度和最大宽度的NSView的宽度?
例如,考虑在窗口中嵌入NSSplitView
。在拆分视图的左侧窗格中是Inspector
,而在右侧窗格中只是一些内容:
---------------------------------
| | | <- NSSplitView
| | |
| Inspector | Content |
| | |
| | |
| | |
---------------------------------
---------------------------------
| |
| |
| Content |
| |
| |
| |
---------------------------------
Inspector
有两个限制:
width >= 200.0 @ 1000
width <= 400.0 @ 1000
分割视图的唯一约束是允许它填充其超视图和Content
视图仅作为填充其超级视图的约束(右侧分割窗格)。
创建此视图时,我想将Inspector
的初始宽度设置为动态值(可能是保存在用户首选项中的内容)。
但如果我天真地做了类似的事情:
width = 320.0 @ 1000
然后拆分视图将不再允许调整该视图的大小。 499
和749
的值也会导致同样的问题。如果我将优先级降低到:
width = 320.0 @ 250
然后拆分视图将调整大小,但其初始窗格宽度不是320.0
,而是400.0
,如Interface Builder中设置的那样。
最终目标是允许Inspector
在给定范围内调整大小,但也完全隐藏或折叠(我希望将width
设置为{{ 1}},以及0
约束到minWidth
。
我怀疑我可以在0
中手动处理这个问题,但我很好奇是否有办法完全通过约束完成此操作。
(注意:大部分布局都是在Interface Builder中完成的,但如果需要,我很乐意以编程方式处理约束.10.8+也很好。)
答案 0 :(得分:0)
您是否尝试过使用-[NSSplitView setAutosaveName:]让NSSplitView执行保存用户首选项的工作,然后在启动时将其作为初始宽度加载?
如果你不想走这条路,你可以做一些与你的第一直觉非常相似的事情。
添加width = 320.0 @ 1000
约束后,您希望布置窗口[window layoutIfNeeded]
,然后删除该约束。
您的Inspector视图将具有更新的帧,但强制它在那里的约束将会消失,从而允许调整视图的大小。