阴影未显示在集合视图中

shadow not showing in collection view

 override func awakeFromNib() {
         super.awakeFromNib()

       makeRoundedCorners()

        cellBackGroundView.layer.shadowColor = UIColor.black.cgColor
        cellBackGroundView.layer.shadowOffset = CGSize(width: 10, height: 10)
        cellBackGroundView.layer.shadowOpacity = 1
        cellBackGroundView.layer.shadowRadius = 4
        cellBackGroundView.clipsToBounds = true
        cellBackGroundView.layer.masksToBounds = true

    }

我正在尝试上面的代码,但阴影没有显示,我没有明白是什么问题。

您可以删除 clipsToBounds = true 属性

  self.shadowColor = color.cgColor
  self.shadowOffset = CGSize(width: 0.0, height: 1.4)
  self.shadowOpacity = opacity
  self.shadowRadius = 0.0
  self.masksToBounds = false

这是因为您将圆角和阴影都应用于单个视图。

您应该将圆角应用于第一个视图,并将阴影应用于作为第一个视图的父视图的另一个视图。

比如cellBackGroundView是cell的subView。那么你应该将圆角应用到 cellBackGroundView 并将阴影应用到单元格(这是 cellBackGroundView 的 superView)。

    addShadowToView(view: cell, value: 3)
    addCornerToView(view: cell.cellBackGroundView, value: 8)

让我与您分享我的功能,

对于阴影,

func addShadowToView (view : UIView, value: CGFloat) {
    view.layer.shadowColor = UIColor.lightGray.cgColor
    view.layer.shadowOffset = CGSize(width: value, height: value)
    view.layer.shadowOpacity = 1.0
    view.layer.shadowRadius = 2
    view.clipsToBounds = false
}

对于圆角,

func addCornerToView (view : UIView, value: CGFloat) {
    view.layer.cornerRadius = value
    view.clipsToBounds = true
}

这是我用于阴影的内容:

extension UIView {
   func addShadow(color: UIColor, shadowRadius: CGFloat, opacity: Float) {
      layer.shadowColor = color.cgColor
      layer.shadowOpacity = opacity
      layer.shadowOffset = .zero
      layer.shadowRadius = shadowRadius
      layer.shadowPath = UIBezierPath(rect: bounds).cgPath
      layer.shouldRasterize = true
      layer.rasterizationScale = UIScreen.main.scale
}}

用法:

view.addShadow(color: UIColor.black, shadowRadius: 4, opacity: 1)

你可以试试这个collectionViewshadow

class CollectionViewCornerRound: UICollectionView {

var viewCornerRadius: CGFloat = 10 {
    didSet {
        layoutSubviews()
    }
}

override func layoutSubviews() {
    super.layoutSubviews()
    layer.shadowRadius = 2
    layer.shadowOpacity = 0.3
    layer.cornerRadius = viewCornerRadius
    layer.masksToBounds = true
    layer.shadowOffset = .zero
    clipsToBounds = true
  }
}