UICollectionView单元格将忽略UICollectionViewDelegateFlowLayout-sizeForItemAt

问题描述 投票:0回答:1

我正在尝试布局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)
    }

该方法已正确调用(通过断点和print()检查),但是单元格决定完全忽略给定的大小,并给出恰好包含其标签文本的大小(如果标签文本为空,则应用崩溃对于“无效参数不令人满意:!CGSizeEqualToSize(size,CGSizeZero)”)。

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

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

ios swift uicollectionview uicollectionviewcell uicollectionviewdelegateflowlayout
1个回答
0
投票

由于某些原因,自动估计的大小比sizeForItemAt方法计算的优先级大。

尝试将collectionViews估算大小设置为

CollectionView - Size Inspector - Estimate Size

© www.soinside.com 2019 - 2024. All rights reserved.