gpt4 book ai didi

cocoa - 设置具有大于和小于约束的灵活 NSView 的显式宽度

转载 作者:行者123 更新时间:2023-12-03 17:21:52 27 4
gpt4 key购买 nike

如何显式设置已具有规定其最小宽度和最大宽度的约束的 NSView 的宽度?

例如,考虑 NSSplitView嵌入在窗口中。在分割 View 的左 Pane 中是 Inspector而右侧 Pane 中只是一些内容:

---------------------------------
| | | <- NSSplitView
| | |
| Inspector | Content |
| | |
| | |
| | |
---------------------------------

---------------------------------
| |
| |
| Content |
| |
| |
| |
---------------------------------

Inspector有两个约束:

  • width >= 200.0 @ 1000
  • width <= 400.0 @ 1000

对分割 View 的唯一约束是允许它填充其 super View 和 Content仅将 View 作为约束来填充其 super View (右侧拆分 Pane )。

创建此 View 时,我想设置 Inspector 的初始宽度到动态值(可能是保存在用户首选项中的东西)。

但是如果我只是天真地做这样的事情:

  • width = 320.0 @ 1000

然后分割 View 将不再允许调整该 View 的大小。 499 的值和749也会导致同样的问题。如果我将优先级降低为:

  • width = 320.0 @ 250

然后分割 View 将调整大小,但其初始 Pane 宽度不是 320.0而是400.0 ,如 Interface Builder 中的设置布局。

最终目标是允许 Inspector既可以在给定范围内调整大小,又可以完全隐藏或折叠(其中我希望将 width 设置为 0 ,并将 minWidth 约束设置为 0 )。

我怀疑我可以在 [layout] 中手动处理这个问题但我很好奇是否有一种方法可以在有限制的情况下完全实现这一点。

(注意:大部分布局都是在 Interface Builder 中完成的,但如果需要的话,我很乐意以编程方式处理约束。10.8+ 也可以。)

最佳答案

您是否尝试过使用 -[NSSplitView setAutosaveName:]让 NSSplitView 完成保存用户首选项的工作,然后在启动时将其加载为初始宽度?

<小时/>

如果您不想走那条路,您可以做一些与您的第一直觉非常相似的事情。

添加 width = 320.0 @ 1000 约束后,您想要布局窗口 [window layoutIfNeeded],然后删除该约束。

您的检查器 View 将具有更新的框架,但强制其存在的约束将消失,从而允许调整 View 大小。

关于cocoa - 设置具有大于和小于约束的灵活 NSView 的显式宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22874616/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com