16

我知道记录在案的建议是使用 UICollectionView Flow Layout 如果您正在做任何“像网格或基于行的中断布局”。但是,我不确定这是否适用于我的情况。

我想要一个网格,但想要一个换行的布局。物品应该在水平和垂直方向上无限地布置,而无需堆叠。本质上,如果内容超出框架,则可以水平或垂直滚动​​的巨型棋盘。

要继承 UICollectionView布局,我必须:

  1. 覆盖prepareLayout以停止布局包装项目。这似乎需要做很多工作。
  2. 覆盖collectionViewContentSize

Apple 表示他们在制作 UICollectionView布局方面做了“很多艰苦的工作”,所以如果可以的话,我应该利用它。但是如果我必须重写prepareLayout以关闭换行,我怀疑我正在丢弃他们的大部分工作。在他们剩下的工作中,我可能不会使用其中的大部分(例如,minimumLineSpacingForSectionAtIndex)。

因为我想要的布局是如此简单,我怀疑我应该继承 UICollectionViewLayout ,因为:

  1. 我将有一个更简单、更清晰的实现,所有内容都在一个布局类中,而不是在子类和委托之间传播。
  2. 我认为这不会比继承 UICollectionView Flow Layout 更难,因为在这两种情况下我都必须重写prepareLayout,我怀疑这就是所有艰苦工作的所在。
  3. 与尝试在 UICollectionView Flow Layout 子类之上添加另一个 kludge 相比,我将处于更好的位置以自定义方式调整其他 UICollectionViewLayoutAttributes 。

我的结论正确吗?

4

2 回答 2

12

UICollectionViewFlowLayout 无论如何都不能支持两个方向,它只能沿着一个轴滚动,水平或垂直。所以你必须继承 UICollectionViewLayout而不是UICollectionViewFlowLayout

然后你必须重写prepareForLayoutlayoutsAttributesForElementsInRect 方法,正如你所说的那样......

于 2013-01-22T18:27:05.753 回答
0

您描述的布局(项目以无限长的水平线排列,部分以无限长的垂直线排列)类似于 App Store 的“特色”部分:)

我也一直打算在我的一些应用程序中使用类似的概念,我认为这里的技巧是它不是由单个UICollectionView. 看起来您正在寻找的内容可以通过使用 aUITableView作为基础来实现,并且您的内容的每个部分都占据表格中的一个单元格。也就是说,每个UITableViewCell都包含一个UICollectionView水平滚动的。

它的关键限制UICollectionView有时并不容易理解,毕竟它是一个单一的scrollView. 您可以覆盖某些功能以启用双向滚动,但是如果您希望某些内容以一种方式滚动,而某些内容以另一种方式滚动,则必须创建嵌套scrollView的 s。

于 2014-02-07T22:04:26.993 回答