集合视图第一个单元格大小问题

Posted

技术标签:

【中文标题】集合视图第一个单元格大小问题【英文标题】:Collection view first cell size issue 【发布时间】:2018-08-27 07:48:34 【问题描述】:

我必须根据我的 api 响应隐藏一些 uicollectionview 的单元格。

我根据我的 json 响应值在 collectionview 的 sizeForItemAtIndexPath 方法中将单元格大小设置为零。

但即使将大小设置为零后,位于第 0 个索引处的单元格始终可见。

我无法从数组中过滤和删除数据。我需要这些数据进行一些操作。

我的 UICollectionView 数据源方法。

func numberOfSections(in collectionView: UICollectionView) -> Int 
    return 5

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return 5


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! testCell
    cell.lblTest.text = "\(indexPath.item)"
    return cell

我的流布局委托方法。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
        if (indexPath.section == 0 && indexPath.item == 0) || (indexPath.section == 1 && indexPath.item == 0)
            return CGSize(width: 0, height: 0)
        
        return CGSize(width: 50, height: 50)
    

预期结果是 0 和 1 部分中第 0 个索引处的单元格被隐藏但仍显示。

【问题讨论】:

我仍然会使用过滤器方法,复制该数组,在需要时使用过滤器并在需要时使用完整的,因为您似乎需要读取“隐藏”值。另外,sizeForItemAt 是否被调用? 是的过滤器数组也是一个选项,但我想使用隐藏的值。所以如果我过滤数组,我将不得不重写我当前的其他数组操作的整个逻辑 【参考方案1】:

您不应该通过尝试将大小设置为 0 来执行此操作。如果您将其设置为 0,则底层代码会将其读取为尝试为您自动调整大小(这就是为什么将其设置为较小的值 close 到 0 看起来几乎可以工作)。您实际上想要做的只是调整您的数据源。因此,当它询问项目数量时,返回的金额不包括您想要隐藏的项目,并且 cellForItem 应该只考虑该项目不存在。

【讨论】:

【参考方案2】:

你必须将其设置为接近 0 的数字,例如 0.1、0.01。

【讨论】:

有效,但在第一个单元格之前留下了额外的空间

以上是关于集合视图第一个单元格大小问题的主要内容,如果未能解决你的问题,请参考以下文章

如何通过自动布局设置集合视图单元格大小

自调整大小集合视图单元格大小问题

集合视图更改单元格大小

在不同设备上动态设置集合视图单元格大小

更改集合视图单元格大小

无法在集合视图中选择几个单元格