首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整大小以适应其内容的动态NSStackView

调整大小以适应其内容的动态NSStackView
EN

Stack Overflow用户
提问于 2016-10-22 16:23:04
回答 2查看 3.2K关注 0票数 1

我想使用NSStackView作为按钮的“浮动”容器。即水平NSStackView,它作为工具栏排序,包含一行正方形按钮(大小固定)。在运行时,一些按钮将被动态显示/隐藏,我希望这个NSStackView根据可见按钮(加上间距、边缘等)动态调整其宽度。

因此,这个NSStackView应该有:

  • 固定高度
  • 基于内容的动态宽度
  • 在设计时不知道它在父视图中的确切位置。
  • 一行具有固定大小的NSButtons

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

代码语言:javascript
复制
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无意义)?

EN

回答 2

Stack Overflow用户

发布于 2016-10-23 05:21:12

从nib加载堆栈视图后,translatesAutoresizingMaskIntoConstraints的值是多少?如果是真的,autoresizingMask是什么?(默认为.none)。

如果是这样的话,那么就会有自动调整掩码的约束,这些约束保存了堆栈视图的框架原点和大小(即从nib加载的任何内容)。

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

票数 2
EN

Stack Overflow用户

发布于 2016-10-25 18:30:20

除了前面提到的translatesAutoresizingMaskIntoConstraints以及前导和顶部约束之外,您是否尝试过修改堆栈视图的拥抱优先级?使用值1000 (必需)绝对防止堆栈视图扩展到其内容之外:

代码语言:javascript
复制
stackView.setHuggingPriority(1000, for: .horizontal)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40194380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档