代码之家  ›  专栏  ›  技术社区  ›  Florian Ldt

根据截面更改UICollectionView布局

  •  1
  • Florian Ldt  · 技术社区  · 7 年前

    我目前正在实施一项 UICollectionView 有几个部分(比如4)如下图所示:

    uicollectionview

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

    我已经实现了两种不同的布局,它们在不同的环境中工作得很好 UICollectionView ,但在同一个布局中切换这两种布局时遇到一些问题 UICollectionView .

    首先,是否可以将布局从一个部分更改为另一个部分,如果可以,可以通过何种方式实现。

    1 回复  |  直到 7 年前
        1
  •  12
  •   fewlinesofcode user10694837    7 年前

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

    要实现您想要的,您必须子类化 UICollectionViewLayout UICollectionViewFlowLayout 因为它需要很多重物。

    Section 0 - Section 2 您的样本中的一部分很容易通过使用 UICollectionViewDelegateFlowLayout .

    像你一样 然后,您可以使用以下方法确定每个单元格大小和插入:

    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
    

    . 对于这种情况,我建议您搜索“瀑布式布局”,GitHub上有一些实现。当您了解其工作原理时,应执行以下操作:

    1. 创造 UICollectionView
    2. UICollectionViewFlowLayout
    3. 将布局子类设置为集合视图布局。
    4. 对于0-2部分,使用普通 UICollectionViewFlowLayout 可能性。
    5. 对于类似第4节的部分,您应该覆盖 func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes?

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