UICollectionViewCell 大小根据屏幕/FrameSize Swift

UICollectionViewCell Size According to Screen/ FrameSize Swift

我有一个集合视图,每个 collectionViewCell 中都有一个图像。对于任何给定的框架/屏幕尺寸,我只想拥有 3 个单元格。我该如何实施。我写了一些基于

的代码
 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)
    }

但是它不工作并且报错。执行此操作的最佳方法是什么。

这是您的 swift 代码:

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 return 是 CGFloat 值所以如果你想用 numberOfCell 然后输入 numberOfCell 必须是 CGFloat 因为你不能用 IntCGFloat

这里是 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)
}

Swift3 的答案,Xcode 8 水平间距固定:

所有较早答案的问题是,给定单元格大小 CGSizeMake(cellWidth, cellWidth) 实际上占据了所有屏幕,没有留出边距线的空间,因为 collectionView 试图通过取一个来调整 row/column 间距每行中的元素更少,并且不需要额外的间距。

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)
}

试试这个, 根据屏幕大小和方向指定 collectionView 单元格项的大小。 你可以看看this

希望对您有所帮助。