类似的问题:How to resize a parent view based on the size of subviews layouted with Autolayout
我有一个NSStackView加载DisclosureViewController
s(NSViewController子类),就像在Apple示例中InfoBarStackView一样。
那些可以扩展和缩回任意高度的视图。
我希望包含NSStackView
的父视图根据NSStackView
的内容调整其高度。在可行的Apple示例中。
然而,不幸的是,Apple正在调整NSWindow的大小,我正在使用CCNStatusItem
(CCNStatusItem Github),这是一个附加到Apple菜单栏中状态项的视图。该窗口在加载时会调整为NSStackView
的内容,但在内容更改时不会调整大小。
当我展开一个部分时,内容会溢出并在视图的底部边缘被剪裁。
我经历了所有的限制,并试图完全重现它,但无法让它工作。在Apple示例中,他们以编程方式添加所有内容,而我在Interface Builder中添加了一个NSStackView。
我的问题是:我在Interface Builder中有哪些约束(具有什么优先级),以便父视图(窗口)动态地调整堆栈视图的内容? 我是否必须调用视图的某些方法才能使其正常工作?
如果我错过了提供一些必要的信息,请告诉我。
更新
接受的答案是正确的方法。这是结果。我可以在https://github.com/julianvogels/CCNStatusItem.git
找到我的分叉版本的CCNStatusItem答案 0 :(得分:1)
使用自动布局约束时,您无需调用视图方法来产生此效果,但只需确保:
屏幕截图似乎表明它不是第一个 - 视图正在按预期增长。所以它可能是第二个或第三个。界面构建器的屏幕截图似乎显示底部StackView<> Container约束是可选的(它是虚线)。根据优先级的实际情况,这可能是您的问题。根据您描述的设计,没有理由不要求该约束。
答案 1 :(得分:0)
问题是CCNStatusItem
与自动布局不兼容。它将其窗口的内容视图设置为其自己的一个视图类(CCNStatusItemWindowBackgroundView
)的实例。您的视图是该视图的子视图。
当它创建并添加其视图时,它不会关闭translatesAutoresizingMaskIntoConstraints
或使用约束来相对于其超视图定位它。这基本上意味着它不能通过约束强制到不同的大小。
同样,当您将视图添加到背景视图时,它不会关闭视图中的translatesAutoresizingMaskIntoConstraints
,也不会设置约束以将视图与背景视图相关联。
由于您已获得源代码,因此可以进行更改。