【问题标题】:Custom NSView in a NSScrollView that takes up the whole visible spaceNSScrollView 中的自定义 NSView 占用了整个可见空间
【发布时间】:2014-01-23 22:58:57
【问题描述】:

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

问题是,如果我的自定义视图需要的空间比它所在的 NSScrollView 少,它不会扩展以填充可见区域。在数据少于可见区域的情况下,我希望它向下扩展 - 以便空间可用作拖放目标等。

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

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

是否有向 NSScrollView 添加视图的技巧,以便它扩展到可见区域的底部,否则它会太短?看起来它应该很简单,而且我之前在我只是手动调用 -setFrame 的情况下完成了它,但是一旦你移动到自动布局世界,这种方法就停止工作了。

【问题讨论】:

  • 您是否尝试过添加高度约束“yourView.height >= parentView.height”,其中 parentView 是剪辑视图?我遇到了与您类似的问题,以下对我有用: myView.width >= clipview.width, myview.height >= clipview.height;并摆脱 IB 错误:myview.centerXY = clipview.centerXY(在构建时删除),为 myview 的 intrinsicSize 设置一个占位符

标签: cocoa autolayout nsview nsscrollview


【解决方案1】:

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

【讨论】:

  • 假设约束都是默认值,例如,新的 Xcode Cocoa 应用程序,在窗口中放置一个 NSScrollView,创建一个新的 NSView 子类,将文档视图设置为该类,然后运行。文档视图不会扩展到滚动视图(通过记录它或将其绘制为NSRectFill([self bounds]) 来证明),即使它有一个intrinsicContentSize,甚至垂直拥抱优先级为 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2017-09-10
  • 2019-08-02
  • 2021-05-30
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
相关资源
最近更新 更多