根据部分

时间:2018-12-04 02:51:05

标签: ios swift uicollectionview uicollectionviewlayout

我目前正在实现一个UICollectionView,其中包含几个部分(例如4),如下图所示:

uicollectionview

从第0节到第2节,它只是一个UICollectionViewFlowLayout,每个节的单元格大小不同,但对于第3节,这是一个自定义布局(瀑布布局)。

我已经实现了2种不同的布局,它们可以在单独的UICollectionView中很好地工作,但是我很难在同一UICollectionView的2种布局之间进行切换。

首先可以将布局从一个部分更改为另一个部分,如果可以的话,可以实现这一点。

1 个答案:

答案 0 :(得分:3)

我认为您的问题标题有些误导。您无需更改每个部分的布局。您需要根据部分显示不同的布局。

要实现所需的功能,必须子类 List("a", "b1","","c2"). foldLeft(List[String]())((b,a) => if (StringUtils.isNotBlank(a)) b:+"abc"+a else b ).mkString(";") ,然后根据部分确定布局。就您的情况而言,我建议您将UICollectionViewLayout子类化,因为这需要大量的工作。

只需使用UICollectionViewDelegateFlowLayout,就可以轻松实现样本的

UICollectionViewFlowLayout

由于那里有“全宽” 单元格,因此可以使用以下方法确定每个单元格的大小和插图:

Section 0 - Section 2

当您尝试构建第3章时,将出现第一个问题。对于这种情况,我建议您搜索“瀑布式布局”,GitHub上有一些实现。确定其工作原理后,应执行以下操作:

  1. 创建func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets func collectionView(UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) -> CGSize func collectionView(UICollectionView, layout: UICollectionViewLayout, minimumLineSpacingForSectionAt: Int) -> CGFloat
  2. 创建UICollectionView子类
  3. 将布局子类设置为集合视图布局。
  4. 对于第0-2节,请使用普通的UICollectionViewFlowLayout可能性。
  5. 对于第4节之类的节,您应覆盖UICollectionViewFlowLayout并手动计算属性。

对不起,如果我的回答太宽泛了。

以下是一些有用的链接: