Ios 底部圆角的Customview在Swift中未获得阴影效果

Ios 底部圆角的Customview在Swift中未获得阴影效果,ios,swift,iphone,xcode,uiview,Ios,Swift,Iphone,Xcode,Uiview,我正在展示一些自定义视图。我试图只显示底部阴影的底角。它可以获得底部圆角,但阴影效果不会出现。如果我去掉角,阴影效果就会出现 func showCustomView() { self.customview.layer.shadowOffset = CGSize(width: 0, height: 5) self.customview.layer.shadowOpacity = 0.6 self.customview.layer.shadowRadius = 3.0

我正在展示一些自定义视图。我试图只显示底部阴影的底角。它可以获得底部圆角,但阴影效果不会出现。如果我去掉角,阴影效果就会出现

func showCustomView() {
    self.customview.layer.shadowOffset = CGSize(width: 0, height: 5)
    self.customview.layer.shadowOpacity = 0.6
    self.customview.layer.shadowRadius = 3.0
    self.customview.layer.shadowColor = UIColor.gray.cgColor
    self.customview.roundCorners(corners: [.bottomLeft, .bottomRight], radius: 12)
}

    extension UIView {
        
        func roundCorners(corners: UIRectCorner, radius: CGFloat) {
            
            if #available(iOS 11, *) {
                self.clipsToBounds = true
                self.layer.cornerRadius = radius
                var masked = CACornerMask()
                if corners.contains(.topLeft) { masked.insert(.layerMinXMinYCorner) }
                if corners.contains(.topRight) { masked.insert(.layerMaxXMinYCorner) }
                if corners.contains(.bottomLeft) { masked.insert(.layerMinXMaxYCorner) }
                if corners.contains(.bottomRight) { masked.insert(.layerMaxXMaxYCorner) }
                self.layer.maskedCorners = masked
            }
            else {
                let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
                let mask = CAShapeLayer()
                mask.path = path.cgPath
                layer.mask = mask
            }
        }
    }

有什么建议吗?

删除
self.clipstobunds=true
圆角(…)

示例

import UIKit

class MissingShadowViewController: UIViewController {

    @IBOutlet weak var customView: UIView!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        showCustomView()
    }
    
    func showCustomView() {
        self.customView.layer.shadowOffset = CGSize(width: 0, height: 5)
        self.customView.layer.shadowOpacity = 0.6
        self.customView.layer.shadowRadius = 3.0
        self.customView.layer.shadowColor = UIColor.gray.cgColor
        self.customView.roundCorners(corners: [.bottomLeft, .bottomRight], radius: 12)
    }

}

extension UIView {
    
    func roundCorners(corners: UIRectCorner, radius: CGFloat) {
        
        if #available(iOS 11, *) {
            // clipping here will hide shadows
            // self.clipsToBounds = true
            self.layer.cornerRadius = radius
            var masked = CACornerMask()
            if corners.contains(.topLeft) { masked.insert(.layerMinXMinYCorner) }
            if corners.contains(.topRight) { masked.insert(.layerMaxXMinYCorner) }
            if corners.contains(.bottomLeft) { masked.insert(.layerMinXMaxYCorner) }
            if corners.contains(.bottomRight) { masked.insert(.layerMaxXMaxYCorner) }
            self.layer.maskedCorners = masked
        }
        else {
            let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
            let mask = CAShapeLayer()
            mask.path = path.cgPath
            layer.mask = mask
        }
    }
}

self.clipsToBounds=false(默认为false,因此删除行也可以)尝试过,但没有效果,仍然阴影不显示@danielmarxwird,复制粘贴您的代码,对我来说效果很好。在哪里调用showCustomView()override init(frame:CGRect){super.init(frame:frame)self.showCustomView()}必需的init?(coder:NSCoder){super.init(coder:coder)self.showCustomView()}这里我已经在这个函数的圆角处调用了{函数我只将其设置为真,但阴影仍然不会出现在底部