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

Fou*_*rth 14 objective-c uiscrollview ios autolayout

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

在此输入图像描述

ScrollView所需的两个步骤是:

  1. 设置ScrollView的位置大小(框架)约束:与使用任何其他视图一样.
  2. 设置内容大小的约束:通过确保ScrollView的子视图中的约束触及ScrollView的所有边(前导,尾随,顶部,底部),如果您在界面生成器中执行此操作而不是以编程方式执行此操作.

第一步工作正常,这是结果:

在此输入图像描述

在此输入图像描述

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

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

在此输入图像描述

突然,ScrollView不再知道它的位置大小(框架)了.

在此输入图像描述

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

hkd*_*lex 13

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

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

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


Don*_*Mag 10

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

  1. 滚动视图的实际框架
  2. 滚动视图中包含的子视图的实际框架
  3. 滚动视图的contentSize - 即它应该在任一方向上滚动多远

所以,1.非常简单.

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

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

  1. 将滚动视图的约束设置为"正常".
  2. 设置子视图的大小 - 仅用于演示目的,将其设置为100 x 100
  3. 将子视图的所有四个边都固定到滚动视图的四个边

运行应用程序.假设您设置背景颜色以便知道您正在查看的内容,您应该看到滚动视图的位置和大小正如您所期望的那样......您应该看到100 x 100的子视图位于滚动视图内的某个位置...而且您可能无法进行任何实际滚动.

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

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

希望有道理!