Ios UICollectionViewCell滚动后重叠无序

Ios UICollectionViewCell滚动后重叠无序,ios,objective-c,uicollectionview,uicollectionviewcell,uicollectionviewlayout,Ios,Objective C,Uicollectionview,Uicollectionviewcell,Uicollectionviewlayout,这是我的第一份申请。我想实现这样的卡堆栈 我使用此应用程序的UICollectionView。并通过minimumlinespace=-20.f UICollectionViewFlowLayout *collectionViewLayout = (UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout; collectionViewLayout.sectionInset = UIEdgeInsetsMa

这是我的第一份申请。我想实现这样的卡堆栈

我使用此应用程序的
UICollectionView
。并通过
minimumlinespace=-20.f

UICollectionViewFlowLayout *collectionViewLayout = (UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout;
    collectionViewLayout.sectionInset = UIEdgeInsetsMake(0.f, 0, 0, 0);
    collectionViewLayout.minimumLineSpacing = -20.f;

我发现在我滚动之后,一些单元格与其他单元格重叠(例如:在黄线中)

我不知道我错了什么。你有什么建议吗


谢谢。

您需要从单元格中删除所有子视图

 for (UIView *view in cell.contentView.subviews) {
       if ([view isKindOfClass:[UILabel class]]) {
                [view removeFromSuperview];
       }
 }

我知道,这个问题很古老,但答案很简单

这里的问题是UICollectionView不知道要如何精确地排列单元格的深度。因此,它只显示添加到视图层次结构的最后一个单元格,位于其他单元格之上

要解决此问题,需要设置适当的单元格zIndex。为此,需要使用自定义UICollectionViewLayout:)

关于Swift的解决方案:

class MyCollectionViewFlowLayout: UICollectionViewFlowLayout {
    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        return super.layoutAttributesForElements(in: rect)?.map { attributes in
            // Set cell's zIndex = cell's row, so each next cell will always overlap previous cell.
            attributes.zIndex = attributes.indexPath.row
            return attributes
        }
    }
}
如果不想创建自定义布局,还有另一种解决方案。只需重写单元格的方法
apply(layouttributes:uiCollectionViewLayouttributes)
如下所示:

class MyCell: UICollectionViewCell {
    ...

    override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
        layer.zPosition = CGFloat(layoutAttributes.indexPath.row)
    }

    ...
}

我也在努力实现这样的目标。你碰巧解决了这个问题吗?
class MyCell: UICollectionViewCell {
    ...

    override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
        layer.zPosition = CGFloat(layoutAttributes.indexPath.row)
    }

    ...
}