在每行的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
)。