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()}这里我已经在这个函数的圆角处调用了{函数我只将其设置为真,但阴影仍然不会出现在底部