Autolayout NSScrollview不会增长contentView

时间:2015-03-19 21:18:37

标签: objective-c cocoa autolayout

我有一个我正在尝试使用自动布局设置的滚动视图。

实际内容位于容器视图中,此容器查看一组可见的框视图。将它们添加到容器视图中没有任何问题。每一个都有一些约束

NSViewController prev;
for(NSViewController *lvc in vcs) {
//each view is padded by 5 from left
    [containerView addConstraint:[NSLayoutConstraint constraintWithItem:lvc.view attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:prev.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:5]];
//Constant height
    [containerView addConstraint:[NSLayoutConstraint constraintWithItem:lvc.view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:300]];
//Constant width
    [containerView addConstraint:[NSLayoutConstraint constraintWithItem:lvc.view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:300]];
prev = lvc;

}


[_scrollView setDocumentView:containerView];
[_scrollView addConstraint:[NSLayoutConstraint constraintWithItem:listContainerView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:_scrollView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]];

但是滚动视图不允许容器视图增长而不增加scrollview本身。 containerView的右边缘附加到滚动视图的右边缘。如果我增长滚动视图,我可以看到列表容器视图中有更多内容,但只有滚动视图那么大。

最后一行是我尝试通过基本上说“让容器视图比滚动视图大”来解决这个问题。这不是设置约束的正确方法吗?

1 个答案:

答案 0 :(得分:3)

NSStackView添加到您的NIB,然后选择编辑器>嵌入>滚动视图。向滚动视图添加约束以使其相对于其superview和/或同级视图保持布局。在堆栈视图及其超级视图(剪辑视图)之间添加约束,以使其顶部和前导边缘与剪辑视图相同。添加约束以使堆栈视图的后缘大于或等于剪辑视图的后缘。添加约束以使堆栈视图的下边缘大于或等于剪辑视图的下边缘。

在您的代码中,将vcs中视图控制器的视图添加为堆栈视图的子视图。堆栈视图的间距默认为8.在代码中,您将间距设置为5.因此,您可以将堆栈视图的间距更改为5.(这可以在NIB中完成。)< / p>