我想使用NSStackView作为按钮的“浮动”容器。即水平NSStackView,它作为工具栏排序,包含一行正方形按钮(大小固定)。在运行时,一些按钮将被动态显示/隐藏,我希望这个NSStackView根据可见按钮(加上间距、边缘等)动态调整其宽度。
因此,这个NSStackView应该有:
我有一个包含NSStackView及其按钮的nib文件,我在运行时加载这些文件:
Bundle.main.loadNibNamed("ToolbarView", owner: self, topLevelObjects: nil)
toolbarView.detachesHiddenViews = true
toolbarView.setFrameOrigin(NSPoint(x: 100, y: 100))我很难找到属性和约束的确切组合,以使这种行为有效。当我隐藏一些按钮时,NSStackView会分离它们,但不会收缩以适应显示的按钮的总宽度。我尝试了所有的NSStackView NSStackViewDistribution选项。
我怀疑我缺少一些约束来使其工作,但是我找到的所有NSStackView示例都将NSStackView锚定在它的superview中,而我无法做到这一点,因为它在父视图中的位置是在运行时设置的。
是否有任何方法使此工作,或我是否需要回到手动计算宽度从可见按钮(哪种类型使使用NSStackView无意义)?
发布于 2016-10-23 05:21:12
从nib加载堆栈视图后,translatesAutoresizingMaskIntoConstraints的值是多少?如果是真的,autoresizingMask是什么?(默认为.none)。
如果是这样的话,那么就会有自动调整掩码的约束,这些约束保存了堆栈视图的框架原点和大小(即从nib加载的任何内容)。
处理此问题的最佳方法是将translatesAutoresizingMaskIntoConstraints设置为false,然后使用约束将其在运行时的父视图中定位。
发布于 2016-10-25 18:30:20
除了前面提到的translatesAutoresizingMaskIntoConstraints以及前导和顶部约束之外,您是否尝试过修改堆栈视图的拥抱优先级?使用值1000 (必需)绝对防止堆栈视图扩展到其内容之外:
stackView.setHuggingPriority(1000, for: .horizontal)https://stackoverflow.com/questions/40194380
复制相似问题