在每行的uicollectionview中填入给定数量的单元格

我有一个集合视图,我想让我们说每行4个单元格。 我知道要完成这一切,我需要做的是将collectionview.frame.size.width除以4.这很容易。 但是,我不能弄清楚的是,如何考虑收集视图侧面的插入和单元之间的间隔。 我在集合视图的左侧和右侧有10个像素插入,以及单元之间有10个像素间隔。 我怎样才能计算所需的单元格宽度考虑到这10个PX插图?

为了更好的解释math,faarwa的例子只有4个单元格。 假设1行,4个单元格项目有5个块间距(伸出4个手指并计算从小指的远端到食指远端的空间)。

对于你在一行中的n个单元,总会有n + 1个空格。 Faarwa假设每个空格都是10,所以他乘以5个单元乘以10得到50.你需要弄清楚填充后剩下多less空间,所以如果假设你的屏幕宽度是200,你必须减去两个值获取剩余宽度,或“(collectionView.frame.size.width-50)”。

继续200宽度假设和4个单元格项目,您必须将您的差异(150)除以4,以获得每个单元格的宽度相等的间距。

试验并通过一些试验和错误,但这里有两个方法,我用集合对象数组来获取练习集的集合视图。

 // UICollectionViewDataSource method func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { let numberOfSets = CGFloat(self.currentExSets.count) let width = (collectionView.frame.size.width - (numberOfSets * view.frame.size.width / 15))/numberOfSets let height = collectionView.frame.size.height / 2 return CGSizeMake(width, height); } // UICollectionViewDelegateFlowLayout method func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets { let cellWidthPadding = collectionView.frame.size.width / 30 let cellHeightPadding = collectionView.frame.size.height / 4 return UIEdgeInsets(top: cellHeightPadding,left: cellWidthPadding, bottom: cellHeightPadding,right: cellWidthPadding) 

}

截图:

在这里输入图像说明 两个细胞项目

四个细胞项目 在这里输入图像说明

Swift 3.0。 适用于水平和垂直滚动方向和可变间距

声明每行所需的单元数

 let numberOfCellsPerRow: CGFloat = 4 

configurationflowLayout来呈现指定的numberOfCellsPerRow

 if let flowLayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout { let horizontalSpacing = flowLayout.scrollDirection == .vertical ? flowLayout.minimumInteritemSpacing : flowLayout.minimumLineSpacing let cellWidth = (view.frame.width - max(0, numberOfCellsPerRow - 1)*horizontalSpacing)/numberOfCellsPerRow flowLayout.itemSize = CGSize(width: cellWidth, height: cellWidth) } 
 (collectionView.frame.size.width-50)/4 

为了说明空间,可以从集合视图框架宽度中减去它(减去5*10 )。