使用自动布局滚动内容

该项目是一个完全在 Interface Builder 中完成的自包含示例。你应该能够在 10 分钟或更短的时间内完成它。然后,你可以将你学到的概念应用到你自己的项目中。

https://i.stack.imgur.com/L4puB.gif

在这里我只使用 UIViews,但它们可以代表你喜欢的任何视图(即按钮,标签等)。我还选择了水平滚动,因为这种格式的故事板截图更加紧凑。但是,垂直滚动的原理是相同的。

关键概念

  • UIScrollView 应该只使用一个子视图。这是一个’UIView’,用作内容视图,用于保存你想要滚动的所有内容。
  • 使内容视图和滚动视图的父级具有相等的水平滚动高度。 (垂直滚动的宽度相等)
  • 确保所有可滚动内容都具有设置的宽度并固定在所有侧面。

开始一个新项目

它可以只是一个单一的视图应用程序。

故事板

在这个例子中,我们将创建一个水平滚动视图。选择 View Controller,然后在 Size Inspector 中选择 Freeform。制作宽度 1,000 和高度 300。这只是让我们在故事板上添加了可以滚动的内容。

StackOverflow 文档

添加滚动视图

添加 UIScrollView 并将所有四个边都固定到视图控制器的根视图。

StackOverflow 文档

添加内容视图

UIView 作为子视图添加到滚动视图。*这是关键。*不要尝试在滚动视图中添加大量子视图。只需添加一个 UIView。这将是你要滚动的其他视图的内容视图。将内容视图固定到四个方面的滚动视图。

StackOverflow 文档

相等高度

现在,在文档大纲中,Command 单击内容视图和滚动视图的父视图,以便同时选择它们。然后将高度设置为相等(控制</ kbd 从内容视图拖动到滚动视图>)。*这也是关键。*因为我们是水平滚动,滚动视图的内容视图将不知道它应该有多高,除非我们以这种方式设置它。

StackOverflow 文档

注意:

  • 如果我们将内容垂直滚动,那么我们将内容视图的宽度设置为等于滚动视图的父宽度。

添加内容

添加三个 UIViews 并给它们所有约束。我用了 8 点的余量。

StackOverflow 文档

约束:

  • 绿色视图:固定顶部,左侧和底部边缘。宽度为 400。
  • 红色视图:固定顶部,左侧和底部边缘。使宽度为 300。
  • 紫色视图:固定所有四个边缘。无论剩余空间是什么,都要做宽度(在这种情况下为 268)。

*设置宽度约束也是关键,*以便滚动视图知道其内容视图的宽度。

成品

就这样。你现在可以运行你的项目。它的行为应该与此答案顶部的滚动图像相似。

进一步研究