是否可以使用 iOS AutoLayout 创建基于动态网格的布局?

Posted

技术标签:

【中文标题】是否可以使用 iOS AutoLayout 创建基于动态网格的布局?【英文标题】:Is it possible to create a dynamic grid based layout using iOS AutoLayout? 【发布时间】:2013-07-16 09:57:42 【问题描述】:

我使用 tableview 来展示一些时间。我想创建以网格格式显示可变数量标签的单元格。请参见下面的示例:

如果我还没有使用UITableView,我显然可以使用UICollectionView 来实现这一点。

我使用UITableView 是因为我想显示带有节标题的行。我只想要表格单元格中的网格布局而不是表格本身。

我对 AutoLayout 还很陌生,并且在我的整个应用程序中使用它相当成功,但我不确定如何实现这样的动态布局?

注意事项:

标签数量可变 设备可能会旋转,因此需要根据可用宽度水平显示动态数量的标签。 所有标签都需要在网格中对齐(见截图)

这可以使用 AutoLayout 吗?

【问题讨论】:

是的,绝对有可能...oliverfoggin.com/an-auto-layout-experiment 现在看看就会写出答案。 您想要的最大“列”数是多少?还是会根据内容而改变? @Fogmeister 列数需要根据 superview 的 bounds.width 动态变化。理想情况下,它会在 iPhone 上纵向显示 4 列。因为它只是时间所有标签都可以具有相同的宽度。 @Fogmeister 该链接看起来非常有趣。期待您的回答。 @Fogmeister 我看过你的项目,它看起来令人印象深刻。虽然它确实需要预先了解我不一定知道的列数,因为我的所有标签都具有内在的内容大小。此外,使用 AutoLayout 似乎需要做很多工作。自己管理框架会不会更容易。目前我决定不使用 AutoLayout 进行这种布局,除非我找到实现所需结果的方法。 【参考方案1】:

最后使用了 UICollectionView 而不是 UITableView 并实现了模仿 UITableView 节标题的 Header 视图。

【讨论】:

以上是关于是否可以使用 iOS AutoLayout 创建基于动态网格的布局?的主要内容,如果未能解决你的问题,请参考以下文章

[iOS开发]autolayout自动布局

iOS - XIB之AutoLayout添加约束

如何使用 Autolayout iOS 在两个视图之上设置视图

iOS AutoLayout 自动调整整个表格(不是单元格!)高度

iOS Autolayout:如何显示/隐藏包含边距的视图?

使用 Autolayout 和通用故事板超级视图是否全屏?