将UIScrollView中的内部视图调整为ScrollView的外部大小

时间:2014-11-18 15:27:23

标签: objective-c uiscrollview nslayoutconstraint

我想仅使用AutoLayout创建个人资料图片查看器。图像查看器可以包含多个图像。用户可以使用滚动视图水平滚动图像。

此图像查看器必须适应任何尺寸,因此我无法对其尺寸进行硬编码。

我的问题是,滚动视图中的图像必须与滚动视图本身的大小相同。但是当我尝试为此添加约束时,我得到以下结果:

  

无法在视图上安装约束。约束是否引用了视图子树之外的内容?这是非法的。

我无法将尺寸附加到内容视图的大小,因为它必须具有多个图像的宽度。那么这样做的好方法是什么?

编辑:我想要这样的事情:

How it should look like

1 个答案:

答案 0 :(得分:1)

我假设您正在以编程方式添加约束,因为您收到了该错误,无论如何,诀窍是将图像的大小链接到滚动视图帧大小(不是内容大小)

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(scrollView)]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView(200)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(scrollView)]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[image1(==scrollView)][image2(==scrollView)]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(image1, image2, scrollView)]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[image1(==scrollView)]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(image1, scrollView)]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[image2(==scrollView)]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(image2, scrollView)]];

这样,图像得到了scrollview框架,而且contentSize很好,因为它需要一个" continuos"从第3行到达交易的约束列表。

请记住,在添加约束之前,需要将视图添加到其超级视图