OSX:如何允许用户在自动布局下调整窗口大小?

Jod*_*ins 2 macos cocoa autolayout

我有一个NSWindow,有一些视图,与自动布局约束相连.

窗口看起来像这样......

Label - TextView - Label - TextView - Label - DatePicker

Label - TextView - Label - PopUp - Label - PopUp
Run Code Online (Sandbox Code Playgroud)

弹出窗口的数据是通过绑定到核心数据获得的,因此直到运行时才知道这些值.我希望这些控件调整大小以适应数据库中的值.

从表面上看,一切似乎都很好.但是,如果我在弹出控件中以一个非常长的字符串结束,那么该控件的大小会导致窗口的大小扩展.

我希望大小是动态的,并根据数据的值进行更改,但我希望约束限制为窗口的大小.

但是,我希望用户能够调整窗口大小,如果他们想让它更宽.我只希望用户调整窗口大小(窗口大小将自动保存和恢复).

如果我在窗口的主视图上设置拥抱值,我会得到它,但这似乎阻止用户也能够调整窗口的大小.如果我降低控件约束的优先级,我不会得到我想要的大小和位置.

所以,基本上,我希望控件随窗口大小的变化而变化,但我不希望窗口大小发生变化,除非用户更改它.我怎样才能实现这一目标?

谢谢!

Ken*_*ses 5

您需要将视图的内容拥抱和压缩阻力优先级更改为小于NSLayoutPriorityWindowSizeStayPut(500).

如果内容拥抱优先级高于该值,则窗口将无法调整大小以至于这些视图被拉伸.如果压缩阻力优先级高于此值,则窗口将无法调整大小以至于这些视图被压缩.

你说"[i] f [你]减少了控件约束的优先级,[你]不会像你想要的那样得到尺寸和位置".什么打破了?即使内容拥抱和压缩阻力优先级降低,您也需要找到实现目标的方法.

您可能还希望对视图设置最小宽度约束,以防止窗口将其压缩为空.总的来说,这些约束将确定窗口的最小大小(您可能确实需要).

此外,您可能希望视图之间的优先级不同,否则您会产生歧义和有些随意的结果.也就是说,如果用户缩小窗口以使一切都不适合,并且如果两个或更多个视图具有相同的抗压缩优先级,那么它将是任意的被压缩的.随着进一步的变化,它甚至可以令人不安地来回翻转.因此,您应该通过命令压缩阻力优先级来有效地指定哪个应首先压缩,然后压缩第二个等.内容拥抱也是如此.