如何在自动布局中使用NSScrollView?

时间:2014-02-03 05:54:54

标签: cocoa autolayout nsscrollview nslayoutconstraint subviews

确定。我一遍又一遍地在这里。我见过博客和可可开发线程。 我见过Kyle Sluder提出的解决方案,但尚未找到真正有效的解决方案。

如何使用自动布局定位NSScrollView的子视图?

它是否只是默默地打破了? 似乎没什么用。

2 个答案:

答案 0 :(得分:1)

好,这是个老问题,但是这个特殊问题是我的个人烦恼,所以我还是会回答!

首先要注意的是,NSScrollView包含一个NSClipView,它本身具有一个称为documentView的视图出口。当您将新的滚动视图拖到情节提要或nib文件中时,所有这些都将为您添加。默认情况下,文档视图是NSView,简称为“视图”。如果您使用的是自定义视图,则只需选择此视图,然后在右侧的检查器中将其类型设置为所需的任何视图即可。否则,您将向其添加子视图。

在这里容易错过的一大事情是,默认情况下,文档视图的布局设置为“将蒙版转换为约束”。如果内容大小永远不会改变,那就很好了,如果是这种情况,您只需将文档视图的框架设置为所需的任何形式,然后将其保留即可。但是,如果您希望它自动调整大小以适合其内容,则需要做一些事情。

首先,该文档视图必须具有完全明确的尺寸。如果您使用的是自定义视图,建议您给它一个intrinsicContentSize。您还应该在IB的检查器中将“本征大小”设置为“占位符”,并为其指定适当的值,否则将收到一堆自动布局警告。如果您的文档视图从其内容中获取大小,则所有子视图必须从上至下,从左至右以不间断的链状链接,以使内容确切知道应该有多大。这本身就是一门艺术,所以我不再赘述。一个只有一个子视图的简单示例是将其顶部,底部,前导和尾随约束固定到其父视图,但是如上所述,如果要执行此操作,最好设置文档视图的类型。

现在好玩了。选择您的文档视图,并将其布局设置为“自动”。接下来,使用合适的值向其超级视图添加顶部,底部,前导和尾随约束。我使用的是零,但您可能需要一个小的边框。最后,选择刚创建的TRAILING和BOTTOM约束,并将它们设置为“> =”(大于或等于),并且优先级为500或更小。优先级非常重要,因为它必须小于剪辑视图确定自己的最小大小时使用的优​​先级。太高了,剪辑视图将被迫保持大于其内容的大小,从而使滚动视图无法小于其内容,从而使其无法使用。

技术细节并不重要。只需记住将文档视图设置为布局即可:自动,固定所有边缘,并使尾部约束和底部约束> =并设置优先级500。

请注意,这将导致您的内容拥抱在左上角。

答案 1 :(得分:0)

您是否尝试将文档视图的setTranslatesAutoresizingMaskIntoConstraints设置为TRUE?

[_scrollView.documentView setTranslatesAutoresizingMaskIntoConstraints:YES];