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)
}
...
}