根据Screen / FrameSize Swift的UICollectionViewCell大小

时间:2015-09-14 17:43:06

标签: ios swift uicollectionviewcell

我在每个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)
    }

但它不起作用并且出错。什么是最好的方法。

4 个答案:

答案 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,因为您无法将CGFloatCGFloat分开。

答案 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

希望这有帮助。