这是我的第一个申请。我想像这样实现卡片堆栈。
我为此应用使用UICollectionView
。并按minimumLineSpacing =-20.f
UICollectionViewFlowLayout *collectionViewLayout = (UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout;
collectionViewLayout.sectionInset = UIEdgeInsetsMake(0.f, 0, 0, 0);
collectionViewLayout.minimumLineSpacing = -20.f;
和
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifier = @"Cell";
CollectionNewCell *cell = (CollectionNewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
cell.layer.borderWidth=1.0f;
cell.layer.borderColor=[UIColor blueColor].CGColor;
cell.layer.cornerRadius=10.0;
cell.layer.masksToBounds=YES;
cell.backgroundColor=[UIColor redColor];
cell.backgroundView.backgroundColor=[UIColor redColor];
return cell;
}
我发现滚动后,一些单元格与其他单元格重叠(例如:黄线)
我不知道自己错了什么。你有什么建议吗?
谢谢。
答案 0 :(得分:0)
您需要从单元格中删除所有子视图
for (UIView *view in cell.contentView.subviews) {
if ([view isKindOfClass:[UILabel class]]) {
[view removeFromSuperview];
}
}
答案 1 :(得分:0)
我知道,这个问题很老,但是答案很简单。
这里的问题是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(_ layoutAttributes: UICollectionViewLayoutAttributes)
:
class MyCell: UICollectionViewCell {
...
override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
layer.zPosition = CGFloat(layoutAttributes.indexPath.row)
}
...
}