使用自动布局在 xcode 的滚动视图中实现带有约束的内容视图的正确方法是什么?

What is the proper way to implement contentview with constraints in a scrollview in xcode using autolayout?

最近我正在测试在 xcode 中做一个非常复杂的视图,只使用滚动视图和以编程方式添加的 imgviews。像这样

我所做的是,我在滚动视图中放置了一个名为 contentview 的 UIView,然后在 contentview 中添加了很多 ImageView。实物比插图复杂得多,所以我不能使用tableview。很抱歉插图不好,但我想你会明白的。

一切都很好,直到我尝试在代码中添加最后一个约束,它在图片中标记为红色。当我这样做的时候,它打破了整个约束链。

换句话说,这是有效的

V:|-[view1(30)]-[view2(30)]-[view3(30)]

这不是

V:|-[view1(30)]-[view2(30)]-[view3(30)]-|

顺便说一句,正确的方法是什么?我试图将图像视图直接添加到滚动视图本身,但我无法使视图像这样使用自动布局

H:|-[view]-|  The superview here is a scrollview

结果,这个视图的宽度会很窄。我猜 scrollview 没有宽度值或什么?那是我的猜测。这就是为什么我添加了一个内容视图作为所有图像视图的容器。

试试这个,它会起作用。 - http://natashatherobot.com/ios-autolayout-scrollview/

总结 -

  1. 将滚动视图添加到主视图。

  2. 添加一个 UIView(我们称之为内容视图)到滚动视图。

  3. 现在将你所有的视图添加到上面的 UIView 中。

为它们中的每一个设置约束,使所有边的间距为0。最后在内容视图和主视图之间添加等高和等宽约束。

好的,终于完成了自己的工作。

使 scrollview 和 contentview 以及里面的所有其他东西自动工作的关键是只使用自动布局。

1、手动给self.view添加scrollview,给scrollview添加一个contentview。将滚动视图和内容视图都设置为 setTranslatesAutoresizingMaskIntoConstraints(false)

2、设置scrollview为H:|[scrollview]|和 V:|[scrollview]|,将 contentview 设置为 H:|[contentview]|和 V:|[contentview]|

3、现在尝试将Views添加到content view中,并将它们的constraints设置到contentview中。您应该看到,当视图大于当前 window 大小时,滚动视图开始滚动。 IE,这个设置会自动设置scrollview.contentSize using autolayout