我想将NSStackView用作按钮的“浮动”容器。即水平NSStackView充当各种工具栏,并包含一行方形按钮(大小固定)。在运行时,某些按钮将动态显示/隐藏,我希望此NSStackView根据可见的按钮(加上间距,边缘等)动态调整其宽度。

因此,此NSStackView将具有:


固定高度
基于其内容的动态宽度
在设计时尚不知道其在父视图中的确切位置
一排具有固定大小的NSButton


我有一个nib文件,其中包含NSStackView及其按钮,这些文件在运行时加载:

Bundle.main.loadNibNamed("ToolbarView", owner: self, topLevelObjects: nil)
toolbarView.detachesHiddenViews = true
toolbarView.setFrameOrigin(NSPoint(x: 100, y: 100))


我正在努力找到属性和约束的确切组合,以使此行为起作用。当我隐藏一些按钮时,NSStackView会分离它们,但不会缩小以适合显示的按钮的总宽度。我尝试了所有NSStackView NSStackViewDistribution选项。

我怀疑我缺少一些限制来完成这项工作,但是我发现所有的NSStackView示例都将NSStackView锚定为其超级视图,但我不能这样做,因为它在父视图中的位置是在运行时设置的。

有什么办法可以做到这一点,还是我需要依靠可见按钮手动计算宽度(使用NSStackView毫无意义)?

最佳答案

从笔尖加载translatesAutoresizingMaskIntoConstraints在堆栈视图上的值是什么?如果为true,autoresizingMask是什么? (默认值应为.none)。

如果是这种情况,则存在自动调整大小的遮罩约束,可将堆栈视图的帧原点和大小保持在适当的位置(即从笔尖加载的任何内容)。

解决此问题的最佳方法是将translatesAutoresizingMaskIntoConstraints设置为false,然后在运行时使用约束将其放置在其父视图中。

关于xcode - 动态NSStackView调整大小以适合其内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40194380/

10-12 18:52