我正在使用自动布局在 ScrollView 中设置内容。 ScrollView 中的对象从上到下固定到前一个对象,因此它们位于彼此之下。我在末尾添加了一个页脚 View ,位于这些对象下方。
注意事项:当内容很少时,contentView 将小于屏幕高度,因此页脚 View 将出现在屏幕中间的某个位置(这是正常行为)。但我想防止这种情况发生,并使 View 停留在底部的某个位置。
换句话说,我想设置一个双重约束:
Put this view below all the objects in the scrollview
AND
keep this view at a distance of max [some number] of the bottom of the screen
以一种始终满足两个约束的方式:
- 如果内容的高度大于屏幕,则向下滚动后 View 出现在底部
- 如果高度较小,则 View “固定”到屏幕底部,在内容底部和该 View 顶部之间留出相对较大的空间
如何使用 AutoLayout 实现这一点?
最佳答案
仅使用自动布局相当容易...无需代码。
关键是使用“内容 View ”来保存元素,并在“底部”元素和“页脚” View 之间使用大于或等于
约束。
在这张图片中,黄色是主视图,绿色是 ScrollView ,蓝色是内容 View ,标签是灰色的,页脚 View 是粉红色的。
- 从一个全新的 View Controller 开始
- 添加一个 ScrollView ,普通约束(我一直使用
20
,所以我们可以看到框架) - 向 ScrollView 添加一个
UIView
- 这将是我们的“内容 View ” - 将 contentView Top/Bottom/Leading/Trailing 都限制为
0
到 scrollView - 将 contentView 的 Width 和 Height 都限制为等于 scrollView
- 添加你的元素——这里我使用了 3 个标签
- 像往常一样限制标签...我使用:
- LabelA - 顶部/前导/尾部均在
20
,与 LabelB 的垂直间距为60
- LabelB - 前导/尾随
20
,与 LabelC 的垂直间距为60
- LabelC - 在
20
处领先/落后
- LabelA - 顶部/前导/尾部均在
- LabelC 也设置为
Number of Lines: 0
因此它将扩展为多行文本 - 添加一个
UIView
作为“页脚 View ”(我在其中贴了一个标签) - 将 footerView 的 Leading/Trailing/Bottom 都限制在
20
(以便我们可以看到框架) - 要么在 footerView 上设置高度限制,要么使用其内容来限制其高度
- 将 LabelC 的 Vertical Spacing 约束添加到 footerView,并将其设置为
>= 40
- 最后一步,修改contentView的Height约束为
Priority: 250
现在,当您扩展/收缩 LabelC 的高度时,footerView 将保持至少 40 磅的垂直空间。当 LabelC 变得足够大以将 footerView“推”到底部下方时,scrollView 将变得可滚动。
结果:
关于ios - 使用 AutoLayout 在 UIScrollView 底部查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50847601/