Swift:UICollectionView动态单元格大小(基于项目的奇数或偶数)在2列网格中

时间:2018-07-16 16:40:55

标签: ios swift uicollectionview

我正在尝试实现一个收集视图,在该视图中必须从API数据加载图像。这里的挑战是我的集合视图是2列网格,如果图像数是奇数,则第一个单元格应跨满整行。这是我想要的设计模型

design mockup

所以按照样机

  • 如果项目是偶数,则在每行中显示2。
  • 如果项目为奇数,则显示第一个以覆盖整行,并显示剩余的跨度2 在每一行中。

我正在按照本教程创建网格视图,但是不知道如何在模型中实现设计

https://www.raywenderlich.com/136159/uicollectionview-tutorial-getting-started

任何帮助将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:2)

您可以仅检查所拥有的物品数量,然后根据是否为奇数设置大小。如果是奇数,并且您只希望每三个中的第一个项目较大,则还可以通过除以3来检查其余项。这是示例。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    if collectionView.numberOfItems(inSection: 0) % 2 == 0 {
        return CGSize(width: (collectionView.frame.size.width - 5) / 2, height: (collectionView.frame.size.width - 5) / 2)
    }
    let remaider = (Double(indexPath.item)/3).truncatingRemainder(dividingBy: 1)
    if remaider == 0 {
        return CGSize(width: self.collectionView.frame.size.width, height:  self.collectionView.frame.size.width)
    }
    return CGSize(width: (collectionView.frame.size.width - 5) / 2, height: (collectionView.frame.size.width - 5) / 2)
}

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

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