我正在尝试使用为UIView类创建的自定义扩展为UIView添加一个阴影。下面是扩展的代码:
extension UIView {
func round(_ radius : CGFloat = 10) {
layer.cornerRadius = radius
clipsToBounds = true
}
func addBorder(color: UIColor, width: CGFloat) {
layer.borderColor = color.cgColor
layer.borderWidth = width
}
func addShadow(opacity: Float, size: Double, radius: Double, color: UIColor ) {
layer.shadowColor = color.cgColor
layer.shadowOpacity = opacity
layer.shadowOffset = CGSize(width: size, height: size)
layer.shadowRadius = radius
layer.masksToBounds = true
}
}
round和addBorder函数工作正常,但addShadow函数似乎不工作。我尝试在UIView示例上调用该函数,如下所示:
let myView = UIView()
myView.addShadow(opacity: 0.5, size: 2, radius: 4, color: .black)
但是阴影并没有出现在视图上
我已经用其他类型的视图测试了这个扩展,比如按钮和标签,阴影工作得很好。
有人知道是什么原因导致了这个问题吗?任何帮助都将不胜感激。提前谢谢你
6条答案
按热度按时间w1e3prcc1#
此问题可能是由
addShadow
函数中的layer.masksToBounds = true
行引起的。此属性将层的子层裁剪到层的边界,这可能会阻止显示阴影。你可以尝试将
masksToBounds
设置为false,然后再将阴影添加到图层中。2g32fytz2#
通过设置
layer.masksToBounds = true
,您可以告诉视图的层剪切任何超出其边界的内容,这将包括您试图添加的阴影。如果这不起作用,您可能需要尝试将视图的backgroundColor属性更改为非半透明的颜色。如果没有要渲染的内容,则不会看到阴影,因为阴影是通过显示层的内容产生的。
f0brbegy3#
您可以尝试添加UIBezierPath并设置shouldRasterize = true。
ktca8awb4#
如果我们使用clipsToBounds = true,它将剪切帧,并且阴影被切断,只需将该行替换为clipsToBounds = false即可修复它。
}
f0brbegy5#
我在阴影方面也有同样的困难。我已经用这个扩展解决了。试试看。
shstlldc6#
layer.masksToBounds应该为false,以禁用层的蒙版,从而在视图边界之外显示阴影。