要使用Flow Layout,还是要自定义?

时间:2013-02-28 12:53:01

标签: ios cocoa-touch uikit uicollectionview uicollectionviewlayout

我想构建一个集合视图布局,如下图所示。

首先,我想将特定部分的所有项目保留在同一行。当用户垂直滚动时,这些部分会滚动页面。当用户水平滚动时,左右项目(向左滚动时在部分标题下“折叠”,从右侧在屏幕上显示新项目)。

enter image description here

我理解Apple说“如果它看起来像一个网格,你可以使用流程布局”,但我想了解这是否只是一个全面的陈述,或者如果上述内容会超出限制。

上面的布局可以使用FlowLayout完成,还是我最好从头开始构建自定义布局?

如果你是一个有布局的大师,这是“孩子的游戏”,我很想看到一个如何继续的例子。

谢谢!

5 个答案:

答案 0 :(得分:4)

您需要使用将继承UICollectionViewFlowLayout的布局类。通过执行此操作,您可以使用以下方法自定义布局行为。此外,您还可以获得Flow Layout的所有挂钩。

 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect; // return an array layout attributes instances for all the views in the given rect

 - (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath;
  - (void)prepareLayout;

答案 1 :(得分:3)

您可以通过使用标准表视图来实现您正在寻找的行为,而不是遇到创建自定义UICollectionViewLayout子类的麻烦,每个行的单元格包含一个标题视图,并且水平 - 滚动行项目的集合视图。

我整理了little example that you can download here

当您在表视图中垂直滚动时,需要做一些额外的工作来维护集合视图的滚动位置,因此我将其保存到实例变量中,并在请求表格单元格时将其恢复。除此之外,我认为示例项目相当简单。

答案 2 :(得分:2)

Here是我的实施!希望这会对你有所帮助!

答案 3 :(得分:0)

您不能在此处将UICollectionViewFlowLayout子类化,因为它是基于单行的布局。

答案 4 :(得分:0)

感谢您的出色回答。这个对我有用。您还可以为每个tableview部分指定一行,并为每个集合视图添加标题部分。