UICollectionViewFlowLayout vs子类化UICollectionViewLayout
我知道如果您正在做任何“像网格或基于行的破坏布局”,那么记录的建议是使用UICollectionView Flow Layout。 但是,我不确定这是否属实。
我想要一个网格,但不想要一个断行布局。 物品应无限制地水平和垂直布置,无需堆叠。 基本上,如果内容超出框架,则可以水平或垂直滚动的巨型棋盘。
要inheritanceUICollectionView 流布局,我必须:
- 覆盖
prepareLayout
以停止包装项目的布局。 这似乎很多工作。 - 覆盖
collectionViewContentSize
。
Apple表示他们在制作UICollectionView Flow Layout方面做了很多艰苦的工作,所以如果可以,我应该利用它。 但是如果我必须覆盖prepareLayout
来关闭换行符,我怀疑我丢掉了他们大部分的工作。 在剩下的工作中,我可能不会使用大部分工作(例如, minimumLineSpacingForSectionAtIndex
)。
因为我想要的布局是如此简单,我怀疑我应该inheritanceUICollectionViewLayout,因为:
- 我将在一个布局类中使用更简单,更清晰的实现,而不是在子类和委托之间传播。
- 我不认为它会比inheritanceUICollectionView Flow Layout更难,因为我必须在两种情况下都覆盖
prepareLayout
,我怀疑这是所有艰苦工作的地方。 - 我会以自定义的方式调整其他UICollectionViewLayoutAttributes,而不是尝试在UICollectionView Flow Layout子类之上添加另一个kludge。
我的结论是否正确?
UICollectionViewFlowLayout无论如何都不能支持两个方向,它只能沿着一个轴滚动,水平或垂直。 所以你必须将UICollectionViewLayout子类化为 UICollectionViewFlowLayout 。
然后你必须覆盖prepareForLayout , layoutsAttributesForElementsInRect方法正如你所说的那样..
您描述的布局(以无限长的水平线排列的项目和以无限长的垂直线排列的部分)类似于App Store的“特色”部分:)
我一直想在我的一些应用程序中使用类似的概念,我认为这里的技巧是它不是由单个UICollectionView
处理的。 您可以通过使用UITableView
作为基础来实现您所寻找的内容,并使您的内容的每个部分占用表中的单个单元格。 也就是说,每个UITableViewCell
都包含一个带水平滚动的UICollectionView
。
UICollectionView
的关键限制有时候并不容易理解,毕竟它只是一个scrollView
。 您可以覆盖某些function以启用两个方向的滚动,但如果您希望某些内容以单向滚动,而某些内容以另一种方式滚动,则必须创建嵌套的scrollView
。