最后一个水平 collectionview 单元格显示了一半

Last horizontal collectionview cell is half displeyed

我有水平 CollectionView,当我启动应用程序时,我图库中的最后一张图片只显示了一半。如何解决?

contentView 框架可能比 CollectionView 框架大。

假设您希望 collectionView 显示 5 个单元格...

在 viewDidLoad 上:

let cvWidth = collectionView.frame.width
let cvHeight = collectionView.frame.height
let cellEdge = cvWidth / 5
let contentSize = cellEdge * CGFloat(numberOfCells)

collectionView.contentSize = CGSize(width: contentSize, height: cvHeight)

不要忘记设置您的 numberOfCells

如果单元格之间有一些 space,您应该这样设置 cellEdge:

let cellEdge = cvWidth / 5 + space

编辑 - 关于 UICollectionViewDelegateFlowLayout:

要在单元格和部分之间设置 space,首先将 UICollectionViewFlowLayoutDelegate 添加到 ViewController:

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout

比起你可以通过这个函数设置interspace、行间距和插入:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
    return UIEdgeInsets(top: 20, left: 0, bottom: 10, right: 0)
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
    return 0
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
    return 0
}

最简单的解决方案是添加一些底部 "inset" 值。

这样做

  1. 在您的 xcode 的 "utility area" 中单击 "size inspector" 选项卡
  2. 然后参考下图

我遇到过类似的问题,对我有帮助的是设置 minimumInteritemSpacingForSectionAt 和 minimumLineSpacingForSectionAt

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 10
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 10
}