4

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

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

在此处输入图像描述

我知道 Apple 说“如果它看起来像一个网格,你可以使用 Flow Layout”,但我想了解这是否只是一个笼统的声明,或者上述内容是否会突破限制。

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

如果您是布局大师,并且这是“儿童游戏”,我很乐意看到如何进行的示例。

谢谢!

4

5 回答 5

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;
于 2013-03-01T05:11:25.717 回答
3

无需费心创建自定义 UICollectionViewLayout 子类,您可以通过使用标准表格视图来实现您正在寻找的行为,每行包含一个标题视图的单元格和水平滚动集合查看行项目。

我整理了一个小例子,你可以在这里下载

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

于 2013-03-07T09:12:50.310 回答
2

是我的实现!希望对你有帮助!

于 2015-04-06T12:14:09.407 回答
0

您不能在这里继承 UICollectionViewFlowLayout,因为它是基于单行的布局。

于 2013-03-07T05:27:45.513 回答
0

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

于 2013-03-08T18:34:06.607 回答