UIScrollView - 需要x位置/宽度的约束,y位置/高度需要约束

时间:2017-05-15 22:41:54

标签: ios objective-c uiscrollview autolayout

我有一个看起来像这样的视图层次结构(基于其他答案和Apple的高级AutoLayout指南,用于使用UIScrollView):

enter image description here

ScrollView所需的 2步是:

  1. 为ScrollView的位置大小(框架)设置约束:与使用任何其他视图的方式相同。
  2. 设置内容大小的约束:通过确保ScrollView的子视图中的约束触及ScrollView的所有边缘(前导,尾随,顶部,底部),如果您这样做在界面生成器中而不是以编程方式。
  3. 第1步起初工作正常,结果就是这样:

    enter image description here

    enter image description here

    预期位置尺寸没有问题。我现在只需要在Interface Builder中使用第2步来定义内容大小(内容高度和内容宽度)。

    现在我添加了触及ScrollView所有4个边缘的约束,如下所示:

    enter image description here

    突然间,ScrollView不再知道它的位置尺寸(框架)了。

    enter image description here

    我查看了其他答案,并按照各个步骤进行操作,但似乎无法解决此问题。抱歉,由于隐私问题,我无法发布Storyboard截图

2 个答案:

答案 0 :(得分:12)

  1. 将滚动视图的顶部,底部,前导,尾随约束设置为其超级视图为0.

  2. 设置滚动视图内的视图,并将其顶部,底部,前导,尾部约束设置为其超级视图为0.

  3. 选择滚动视图内的视图,转到尺寸检查器并将“内在尺寸”设置为“占位符”。

答案 1 :(得分:8)

滚动视图一开始可能有点棘手。你真的有3个部分:

  1. 滚动视图的实际框架
  2. 滚动视图中包含的子视图的实际框架
  3. 滚动视图的contentSize - 即它应向两个方向滚动的距离
  4. 所以,1。非常简单。

    第二部分似乎也是直截了当的,除了我们倾向于将子视图“固定”到其超视图的内边缘。在滚动视图子视图的情况下,那些约束是定义contentSize的内容。您必须确保子视图具有“大小”。

    从一个子视图开始,您将:

    1. 将滚动视图的约束设置为“正常”。
    2. 设置子视图的大小 - 仅用于演示目的,将其设置为100 x 100
    3. 将子视图的所有四个边都固定到滚动视图的四个边缘
    4. 运行该应用。假设您设置背景颜色以便知道您正在查看的内容,您应该看到滚动视图的位置和大小正如您所期望的那样......您应该看到100 x 100的子视图位于滚动视图内的某个位置...并且您可能无法进行任何实际滚动。

      如果您返回并将子视图更改为100 x 800,并且仍将其底部约束固定到滚动视图的底部(子视图的超级视图),然后再次运行该应用程序...您 能够向上和向下滚动以查看子视图的完整800点高度。

      考虑它的方法是:滚动视图的内容 - 无论是一个还是多个子视图 - 必须定义其自己的大小,这将定义可滚动区域(滚动视图的contentSize)。

      希望有意义!