在 iOS 中使用自动布局填充 UIScrollView 的内容

Posted

技术标签:

【中文标题】在 iOS 中使用自动布局填充 UIScrollView 的内容【英文标题】:Fill UIScrollView with its content using autolayout in iOS 【发布时间】:2015-06-24 10:36:16 【问题描述】:

我正在制作一个基于表单的 UIScrollView,其中将包含一些标签和文本字段。

我的 ScrollView 高度会随着 ios 设备的高度而增加。

PS:我不想为 Scrollview 的每个元素添加约束,因为在我的例子中可能有 100 个表单字段。

我想要的是,像这样完全占据我的滚动视图的内部内容:

到目前为止,没有特殊的约束,按钮用底部边缘标记,滚动视图从顶部边缘固定。此外,滚动视图和按钮之间的垂直间距也被定义。

这是自动布局约束截图。

【问题讨论】:

【参考方案1】:

如果标签的数量是可变的,我建议在代码中而不是在 Interface Builder 中进行。

在代码中,您可以使用循环将每个标签设置为与其上方的标签具有相同的宽度/高度。您可能希望将它们的高度设置为 >= 最小值。确保将第一个标签固定在顶部,最后一个标签固定在底部。

但这可能很麻烦,为什么不直接使用UITableView?您可以修改行高以让单元格完全占据视图。

- tableView:heightForRowAtIndexPath: - tableView:estimatedHeightForRowAtIndexPath:

【讨论】:

标签的数量不是可变的。我只是在寻找类似于滚动视图上的自动调整大小的解决方案,您在其中删除了滚动视图内元素的所有自动调整大小约束,并且它们被平均拖动在滚动视图中,当它的高度增加时。【参考方案2】:

我刚刚遇到同样的问题,并且已经写了一个 pod called TLFormView 来做到这一点:一个基于 UIScrollView 的表单。

它还有一些不错的功能,例如:

带有TLFormModel 的声明性形式分类法只需扩展它,添加您想要的属性就可以了。没有delegate,没有事件处理,没有样板。 处理 iPhone 和 iPad 不同布局的好方法 具有NSPredicate 的条件可见性可以访问其他字段中的所有值(例如:当字段 B 具有特定值时显示字段 A) 就地帮助弹出框 所有字段都是 TLFormFields 扩展 UIView,因此您可以放置​​您需要的任何内容。

您可以直接在命令行中使用pod try TLFormView 进行尝试。 如果你想了解更多,我写了一些关于它的博客文章here。

请在此处或在博客文章中发表评论,让我知道您对此的看法。此外,任何贡献都非常欢迎GitHub repo

【讨论】:

以上是关于在 iOS 中使用自动布局填充 UIScrollView 的内容的主要内容,如果未能解决你的问题,请参考以下文章

iOS 自动布局:这可以用 IB 完成吗?

预填充Google地图自动填充功能(iOS / Swift)

横向使用自动布局的 iOS 拉伸视图

自动布局根据文本调整按钮大小并让文本字段填充可用空间

在自动布局中向 UILabel 添加填充

带有自动布局的 uilabel 使用填充调整大小