UICollectionView 不同大小的单元格和项目数

Posted

技术标签:

【中文标题】UICollectionView 不同大小的单元格和项目数【英文标题】:UICollectionView different size cell and item count 【发布时间】:2018-11-29 11:03:32 【问题描述】:

使用UICollectionView flow delegate,我正在尝试完成此操作,但我仍然需要删除两个单元格区域中的巨大间距。

我的代码:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    if indexPath.row == 0  || indexPath.row == 5 
        return CGSize(width: (getWidth()/2) , height:  (getWidth()/2))
    
    return CGSize(width: (getWidth()/4) , height: (getWidth()/4))


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat 
    return 0


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat 
    return 0


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets 
    return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)

预期:

【问题讨论】:

你的getWidth函数是什么 你需要创建你的自定义 collectionViewLayout 来获得类似的东西。我认为开箱即用的布局是不可能的 尝试 BSJ 促销代码 raywenderlich.com/… 这会对你有所帮助。 问题似乎在你的 getWidth() 函数中检查它。或者可能在您的图像约束中不是 0 【参考方案1】:

使用 plain UICollectionViewLayout 是不可能做到这一点的。就其本质而言,UICollectionViewLayout 是一个“line-braking-layout”,而 line-height 是其最高元素的高度。请参阅以下内容:

Apple docs on using UICollectionViewFlowLayout

但是,您可以通过子类化UICollectionViewFlowLayout 来实现您想要的行为。以下是操作指南:

Creating custom layouts

【讨论】:

以上是关于UICollectionView 不同大小的单元格和项目数的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView Objective C中有2种不同的单元格大小

设置单元格数据后如何更新 UICollectionView 中单元格的大小?

iOS UICollectionView 原型单元格大小属性被忽略

UICollectionView 中的单元格顺序

使用动态大小的单元格限制 UICollectionView 的数量

通过切换布局触发的动画 UICollectionView 单元格调整大小