Autolayout正在调整我的窗口大小

时间:2012-08-30 07:21:36

标签: objective-c cocoa appkit autolayout nslayoutmanager

我有一个启用了autolayout的笔尖,其中包含一个视图控制器的视图,另外还有一个带有占位符视图的窗口,用于将其添加到其中。占位符相对于其超级视图和窗口中的其他视图有约束,在涉及我的视图控制器之前,我有占位符按照我想要的方式调整窗口大小。稍后我加载nib并将其顶级视图添加为占位符的子视图,我还手动创建约束以使其与占位符的边缘对齐。

一切都很好,我在我的应用程序中的几个实例中使用此模式,但在某些情况下,添加视图后,我的窗口会调整大小!它正在缩小到添加视图的最小尺寸,而不是扩展到当前窗口大小的视图。

到目前为止,我发现阻止这种情况的唯一方法是,在添加视图并创建其约束时,还要设置视图的框架,以便为占位符和窗口的当前状态提供初始大小。在某些时候这没关系,但我希望能够定义更复杂的约束,简单地将每个边缘与占位符超级视图对齐。我不想为每种情况编码帧算法。

有谁知道发生了什么事?如果窗口已经指示了我占位符的大小,而不是相反,那么在添加子视图时我该怎么办才能使当前窗口大小仍然优先?

我已经看到Xcode的IB窗口中的弹出菜单似乎是关于仅影响子视图的约束,还有superview(设置为我的所有笔尖的前者),是否正在发生与此功能相关的事情?我还没有找到任何其他相关信息。

1 个答案:

答案 0 :(得分:11)

您希望将压缩阻力优先级设置为小于NSLayoutPriorityWindowSizeStayPut的值,即500.这意味着窗口的大小优先于视图的大小。

您可以从IB尺寸检查器设置此项。

Compression resistance priority

或者您可以使用-[NSView setContentCompressionResistancePriority:forOrientation:]

以编程方式设置它