我想构建一个集合视图布局,如下图所示。
首先,我想将特定部分的所有项目保留在同一行。当用户垂直滚动时,这些部分会滚动页面。当用户水平滚动时,左右项目(向左滚动时在部分标题下“折叠”,从右侧在屏幕上显示新项目)。
我理解Apple说“如果它看起来像一个网格,你可以使用流程布局”,但我想了解这是否只是一个全面的陈述,或者如果上述内容会超出限制。
上面的布局可以使用FlowLayout完成,还是我最好从头开始构建自定义布局?
如果你是一个有布局的大师,这是“孩子的游戏”,我很想看到一个如何继续的例子。
谢谢!
答案 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部分指定一行,并为每个集合视图添加标题部分。