在NSScrollView中自定义NSView,占用整个可见空间

时间:2014-01-23 22:58:58

标签: cocoa autolayout nsview nsscrollview

我有一个自定义的NSView子类,我把它放在NSScrollView中,基本工作正常。它总是占用其可用空间的整个宽度,因此其约束占据滚动视图的整个宽度。占用多少垂直空间取决于它必须显示多少数据,因此它只能垂直滚动。这一切都很棒。

问题是,如果我的自定义视图所需的空间少于它所在的NSScrollView,则它不会展开以填充可见区域。如果数据少于可见区域中的数据,我希望它向下扩展 - 这样空间就可以作为拖放目标,等等。

  • 我试过改变它的“拥抱优先级”。我已经尝试添加一个约束来保持底部低于NSClipView的底部。我无法想出任何基于约束的解决方案来解决这个问题(尽管我也没有排除这种可能性)。

  • 我尝试在NSScrollView更改大小时捕获通知,并调整自定义视图的框架(如果它太小),但(可能是因为我只能更改其当前框架,而布局系统完成所有布局以后)我似乎也无法做到这一点。

是否有一个技巧可以将视图添加到NSScrollView,以便它可以扩展到可见区域的底部,否则它会太短?看起来它应该是这么简单,我之前已经完成过,我只是手动调用-setFrame,但是一旦你进入自动布局世界,这种方法就会停止工作。

1 个答案:

答案 0 :(得分:0)

不知道你的约束和内容拥抱和内容压缩实际上是什么样的...... 拥有至少一个对superview具有> =约束的边缘的内容可能会这样做,但您可能需要调整优先级。  您可能还需要确保在自定义视图类中实现了intrinsicContentSize,这会告诉内容拥抱和压缩他们需要知道的内容。