当单元格即将离屏时,UICollectionView Cell的阴影突然消失

时间:2018-01-16 15:32:01

标签: ios swift uicollectionviewcell

我有一个带有圆角和阴影掉落单元格的集合视图。当单元格即将被导航栏覆盖时,单元格的阴影突然消失,而不是平滑地移出视图。以下是代码:

    contentView.layer.cornerRadius = 20
    contentView.layer.masksToBounds = true

    layer.shadowColor = UIColor.black.cgColor
    layer.shadowOpacity = 0.1
    layer.shadowOffset = CGSize(width: 0, height: 5.0)
    layer.shadowRadius = 5.0
    layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: contentView.layer.cornerRadius - 3).cgPath
    layer.shouldRasterize = true
    layer.rasterizationScale = UIScreen.main.scale

这是显示问题的gif。专注于细胞底部的阴影。导航栏为白色。任何帮助,将不胜感激。谢谢!

Problem demonstration (gif)

2 个答案:

答案 0 :(得分:0)

我认为这只是因为细胞确实被从视野中移除了,因此它的阴影随之消失。此时,单元格的框架在视图之外,而阴影仍然可见(阴影在框架周围) - 但是当框架离开视图时,collectionView将移除单元格。所以影子突然消失了。

我会怎么做才非常简单。我会重构代码以将当前单元格内容包装到新的UIView中 - 让我们调用它wrapper,这将丢弃阴影。然后将此wrapper放入单元格contentView中,以便wrapper及其阴影适合contentView。然后阴影将成为contentView帧的一部分,这意味着只有当整个单元格被隐藏时,阴影才会从屏幕上消失。

当然,您必须修改单元格的collectionView大小,因为现在单元格将更大以包含阴影。

答案 1 :(得分:0)

而不是设置contentView的阴影,而是将所有内容嵌入UIView并设置该视图的阴影。然后你必须增加你的细胞高度20 points或你的阴影高度。这应该可行。我猜。