UICollectionViewCell没有在Swift 3中填满整个屏幕

时间:2016-11-25 22:02:14

标签: ios swift uicollectionview uicollectionviewcell

enter image description here

我有一个UICollectionView,其单元格覆盖整个屏幕。我的问题在于,右侧有一个小空间,显示不同的单元格。我希望每个单元格覆盖整个屏幕宽度。

以下是我尝试的内容:

  1. 从故事板
  2. 将最小间距设置为0
  3. 设置每个单元格以适合整个视图框架
  4. private func collectionView(collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
        return CGSize(width: view.frame.width, height: view.frame.height)
    }
    

    我还有什么办法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:6)

正确的Swift 3实现应该是

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let itemWidth = collectionView.bounds.width
        let itemHeight = collectionView.bounds.height
        return CGSize(width: itemWidth, height: itemHeight)
}

这将使每个集合视图单元格填满整个集合视图。它不应该是私人的。现在您需要做的就是确保您的集合视图在整个视图中延伸。

另外,请确保扩展ViewController以包含UICollectionViewDelegateFlowLayout以使上述方法起作用,并在Storyboard中将所有部分插入更改为0。

答案 1 :(得分:1)

UICollectionViewDelegate、UICollectionViewDataSource、UICollectionViewDelegateFlowLayout

添加所有 3 个代表很重要。特别是UIDelegateFlowLayout。

答案 2 :(得分:0)

只是为了改进投票最高的答案:您需要添加 UICollectionViewDelegateFlowLayout 一致性,但如果您使用 UICollectionViewController 这不是必需的 - 它已经符合所有必要的协议。< /p>

此外,实现 sizeForItemAt 的更短方法:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return collectionView.bounds.size
}