UICollectionView 单元格忽略 UICollectionViewDelegateFlowLayout - sizeForItemAt

Sha*_*lah 4 ios uicollectionview uicollectionviewcell swift uicollectionviewdelegateflowlayout

我正在尝试布局我的 collectionViewCell 的大小,以便在每一行中有 7 个单元格(简单吧?)。

单元格很简单,只有一个UILabel,上左下右约束为0。

我已经设置了 sizeForItemAt 方法,如下所示,确保我的控制器是 collectionViewDelegateFlowLayout、collectionViewDelegate 和 collectionViewDataSource,以及 collectionview.delegate 和 .datasource = self。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let safeScreenWidth = self.view.frame.size.width - 30

        let width: CGFloat = (safeScreenWidth / 7)
        let height: CGFloat = 40.0

        return CGSize(width: width, height: height)
    }
Run Code Online (Sandbox Code Playgroud)

该方法被正确调用(使用断点和 print() 检查),但是单元格决定完全忽略给定的大小,并且输出的大小刚好足以包含其标签的文本(如果标签的文本为空,则应用程序崩溃“无效参数不满足:!CGSizeEqualToSize(size, CGSizeZero)")。

我尝试设置不同的尺寸,例如宽度 = 200,高度 = 200;但是没有任何改变,正如我所说,单元格总是很小,刚好适合其标签的文本。

一个快速的解决方法是在 cellForItemAt 中为标签设置高度和宽度约束,但我想了解为什么 sizeForItemAt 不起作用。

Vik*_*tor 22

出于某种原因,自动估计的大小比sizeForItemAt方法中的计算具有更大的优先级。

尝试将 collectionViews Estimate Size 设置为None

CollectionView - 尺寸检查器 - 估计尺寸

  • 半年后,我自己的答案帮助我在新项目中检查了 XCode 11.4.1 和 Swift 5 (6认同)