10

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

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

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

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

我已经看到 Xcode 的 IB 窗口中的弹出菜单似乎是关于仅影响子视图和超级视图的约束(对于我的所有笔尖都设置为前者),与此功能相关的是什么?我还没有找到任何关于它的东西。

4

1 回答 1

13

您希望将抗压缩优先级设置为小于NSLayoutPriorityWindowSizeStayPut500 的值。这意味着窗口的大小优先于视图的大小。

您可以从 IB 大小检查器中进行设置。

抗压优先

或者您可以通过编程方式设置它-[NSView setContentCompressionResistancePriority:forOrientation:]

于 2013-02-09T05:23:32.167 回答