我在每个collectionViewCell中都有一个带有图像的集合View。对于任何给定的帧/屏幕尺寸,我想只有3个单元格。我该如何实现呢。我已根据this post
编写了一些代码 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let numberOfCell = 3
let cellWidth: CGFloat = [[UIScreen mainScreen].bounds].size.width/numberOfCell
return CGSizeMake(cellWidth, cellWidth)
}
但它不起作用并且出错。什么是最好的方法。
答案 0 :(得分:9)
这是你的快捷代码:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let numberOfCell: CGFloat = 3 //you need to give a type as CGFloat
let cellWidth = UIScreen.mainScreen().bounds.size.width / numberOfCell
return CGSizeMake(cellWidth, cellWidth)
}
此处numberOfCell
的类型必须是CGFloat
,因为UIScreen.mainScreen().bounds.size.width
会返回CGFloat
值,因此如果您想将其除以numberOfCell
,请输入{ {1}}必须为numberOfCell
,因为您无法将CGFloat
与CGFloat
分开。
答案 1 :(得分:6)
这是Swift 3代码,您可以实现UICollectionViewDelegateFlowLayout
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let numberOfCell: CGFloat = 3 //you need to give a type as CGFloat
let cellWidth = UIScreen.main.bounds.size.width / numberOfCell
return CGSize(width: cellWidth, height: cellWidth)
}
答案 2 :(得分:1)
回答Swift3,Xcode 8,水平间距固定:
所有早期答案的问题是给定单元格大小CGSizeMake(cellWidth,cellWidth)实际上占用了所有屏幕,没有空间用于边缘线,因为collectionView试图通过减少每个元素中的一个元素来调整行/列间距行和不需要的额外间距。
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let linespacing = 5 //spacing you want horizantally and vertically
let numberOfCell: CGFloat = 3 //you need to give a type as CGFloat
let cellWidth = UIScreen.mainScreen().bounds.size.width / numberOfCell
return CGSizeMake(cellWidth - linespacing, cellWidth - linespacing)
}
答案 3 :(得分:1)
试试这个, 根据屏幕大小和方向指定collectionView单元项的大小。 您可以查看this
希望这有帮助。