如何为滚动视图定义适当的约束以有效工作

How to define proper constraints for scrollview to work effectively

我的故事板布局很简单,如附图所示。我假设正文可以从一行跨越到多行。考虑到多行的情况,我希望内容滚动以便按钮可以点击。但是,根据我设置的约束,滚动视图不会滚动。为了获得预期的效果,我应该更改哪些约束?谢谢。

为了使您的约束适合滚动视图,您必须通过某些方式follow.please找到以下步骤。

1.Add 滚动视图到超级 view.After 添加滚动视图 添加子视图到滚动视图 如图所示。 此视图将具有与滚动视图相同的 x、y 坐标以及相同的高度和宽度。 请参考下图以了解层次结构。

您会看到红色警告,因为我们还没有添加任何约束。

  1. 现在是应用一些约束的时候了。 参考下面的图片并添加顶部、底部、前导和尾随到滚动视图。

  1. 现在向滚动视图的子视图添加相同的顶部、底部、前导和尾部。参考下图。

  2. 现在是真正的 trick.Hold 滚动和查看合二为一,并给它们相等的宽度,相等的高度约束,如下图所示。

您的约束几乎 set.now 取决于您的包含拉伸视图。 当您在点击更新约束后增加视图的高度时。

你需要做的最后一件事是改变滚动视图的底部约束 value.It 将是一些负面的 value.Replace 它 0.follow 下面的截图

如果有效请更新

使用UIScrollView的关键:你必须有一个"chain"的约束来允许auto-layout决定滚动视图的.contentSize

Step-by-step(我喜欢在布局时设置背景颜色,这样可以很容易地看到元素的边界/框架)...

向您的视图控制器添加一个 UIScrollView(哈密瓜色),并将其始终限制为 20 磅(以便我们可以看到它的位置):

添加一个UIView作为你的ContentView(草莓色)作为滚动视图的子视图。为滚动视图赋予相等的高度和宽度约束,并将顶部/前导/尾部/底部约束全部设置为 0:

添加您的 Title UILabel(黄色背景)。约束它Top: 30 / Leading: 50 / Trailing: 50。添加您的 Body UILabel(黄色背景)。将其顶部限制在标题标签的底部(我使用 200)和 Leading: 10 / Trailing: 10。添加您的 UIButton(浅灰色背景)。将其顶部限制在 Body 标签的底部(我使用 50),并且 Leading: 50 / Trailing: 50:

到目前为止,没有什么特别的,你不会得到任何滚动...

接下来,将另一个0的Bottom约束添加到ContentView,并改变第一个Bottom约束为 >= 0 并将新底部约束的优先级设置为 250:

这将(再执行几个步骤后)允许 ContentView 根据其内容展开/折叠,以及控制滚动视图的 .contentSize

下一步是告诉 Button 确定 ContentView 的高度 - 因此向按钮添加 30 的底部约束(这将等于Top: 30 我们给标题标签了):

当然,这不完全是我们想要的。它拉伸了按钮的高度,因为我们在 ContentView 上设置了 高度约束 。所以... ContentView:

中删除 高度限制

结果是 ContentView 高度将缩小以适合按钮底部以下 30 磅。

如果您向 Body 标签添加更多文本(假设它设置为 Number of Lines; 0),您将看到 Body 标签展开并且 "push down"按钮,依次 "pushes down" ContentView 的底部:

如果您向 Body 添加足够多的文本来推动滚动视图底部下方的按钮 - 无论是在 IB 中还是通过代码 - 它现在将垂直滚动。

希望说的很清楚...如果您有任何问题,请询问。