UICollectionViewCell 阴影与装饰视图不一致

Posted

技术标签:

【中文标题】UICollectionViewCell 阴影与装饰视图不一致【英文标题】:UICollectionViewCell inconsistent shadow with decoration view 【发布时间】:2018-12-10 22:30:14 【问题描述】:

我正在使用IGListKit 和我的UICollectionView。现在 CollectionView 非常简单,因为它每个部分只有一个单元格。该单元格包含一个内部水平UICollectionView 作为图像幻灯片。

由于我需要在整个部分周围添加阴影,因此我使用 Decoration Views,并将其应用为边框阴影:layer.shadowPath

我注意到一些奇怪的事情,阴影的不透明度会随着幻灯片中当前显示的图片而变化。如果图片(或图片的一部分)很亮,您可以看到阴影不透明度发生变化。

我不知道这是否可以解决。

您可以清楚地看到,如果我在幻灯片中滑动图片时截屏,顶部的阴影在一侧较暗。

装饰视图代码:

class FeedItemBackgroundShadowView: UICollectionReusableView 

    // MARK: Initialization

    ... Constructors calling setup

    // MARK: Setup

    override func layoutSubviews() 
        super.layoutSubviews()
        self.layer.shadowPath = UIBezierPath(roundedRect: self.bounds, cornerRadius: Constants.cornerRadius).cgPath
    

    func setup() 
        self.layer.cornerRadius = 12.0
        self.layer.backgroundColor = UIColor.white.cgColor
        self.layer.shadowColor = UIColor.black.cgColor
        self.layer.shadowOffset = CGSize(width: 0.0, height: 2.5)
        self.layer.shadowRadius = 12.0
        self.layer.shadowOpacity = 0.35

代码的其余部分是一个简单的 UICollectionViewCells,它嵌入了一个 UICollectionView

【问题讨论】:

可能与override func layoutSubviews 方法有关。当您水平滚动时,您可以检查何时触发该方法吗?在触发该方法并将实际的 bezierpath 添加为层之前,阴影行为可能会很奇怪。 装饰单元格中的layoutSubviews (FeedItemBackgroundShadowView) 仅在我垂直滚动时调用。当我在单元格中水平滑动时不会调用它。 【参考方案1】:

你确定这不是错觉吗?

【讨论】:

以上是关于UICollectionViewCell 阴影与装饰视图不一致的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionViewCell 阴影导致小滞后

如何使用清晰的背景颜色向 UICollectionViewCell 添加阴影?

UICollectionViewCell 阴影与装饰视图不一致

如何让我的 UICollectionViewCell 阴影渗入我的主视图?

吊书袋子与装逼单词

UICollectionView 单元格阴影