Fit given number of cells in uicollectionview per row

后端 未结 5 1480
生来不讨喜
生来不讨喜 2021-01-31 06:52

I have a collection view and I would like to have let\'s say 4 cells per row. I know that to accomplish this all I need to do is divide collectionview.frame.size.width

5条回答
  •  逝去的感伤
    2021-01-31 07:13

    iOS 13 Swift 5+

    Collectionview Estimate Size must be none

    Declare margin for cell

    let margin: CGFloat = 10
    

    In viewDidLoad configure minimumInteritemSpacing, minimumLineSpacing, sectionInset

     guard let collectionView = yourCollectionView, let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else { return }
    
        flowLayout.minimumInteritemSpacing = margin
        flowLayout.minimumLineSpacing = margin
        flowLayout.sectionInset = UIEdgeInsets(top: margin, left: margin, bottom: margin, right: margin)
    

    UICollectionViewDataSource method sizeForItemAt

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    
        let noOfCellsInRow = 2   //number of column you want
        let flowLayout = collectionViewLayout as! UICollectionViewFlowLayout
        let totalSpace = flowLayout.sectionInset.left
            + flowLayout.sectionInset.right
            + (flowLayout.minimumInteritemSpacing * CGFloat(noOfCellsInRow - 1))
    
        let size = Int((collectionView.bounds.width - totalSpace) / CGFloat(noOfCellsInRow))
        return CGSize(width: size, height: size)
    }
    

提交回复
热议问题