我有一个ViewController,在那个控制器中有两个UIViews。
我想在第二个UIView上显示的第一个UIView阴影的底部添加。
first UIView
-------------
<- shadow here
secondUIView
但是当我只是添加这段代码时,它就无法正常工作。
firstView.layer.masksToBounds = true
firstView.layer.shadowOffset = CGSizeMake(0,5)
firstView.layer.shadowOpacity = 0.5
firstView.layer.shadowPath = UIBezierPath(rect: firstView.bounds).CGPath
答案 0 :(得分:14)
如果您将maskToBounds
设置为false
,则应显示阴影。
firstView.layer.masksToBounds = false
如果masksToBounds
属性为true
,那么超出视图边界的任何内容都将被剪切到这些边界。
答案 1 :(得分:6)
如果您有两个观看次数view1
和view2
,而view2
位于view1
之下,view2
可能会涵盖view1
的影子。在view2
之后将view1
添加为子视图时会发生这种情况。
在添加view1
后添加view2
作为子视图,或在某个时刻调用[superview bringSubviewToFront:view1]
。
答案 2 :(得分:1)
Swift 4.2
extension UIView {
public func addShadowToView(shadow_color: UIColor,offset: CGSize,shadow_radius: CGFloat,shadow_opacity: Float,corner_radius: CGFloat) {
self.layer.shadowColor = shadow_color.cgColor
self.layer.shadowOpacity = shadow_opacity
self.layer.shadowOffset = offset
self.layer.shadowRadius = shadow_radius
self.layer.cornerRadius = corner_radius
}
}
将该功能称为
firstView.addShadowToView(shadow_color: UIColor.black, offset: CGSize(width: 0, height: 5), shadow_radius: 5.0, shadow_opacity: 0.5, corner_radius: 0.0)
还请确保您的
查看clipsToBounds属性为false
firstView.clipsToBounds = false
FirstView backgroundColor不应为纯色
firstView.backgroundColor = UIColor.white
答案 3 :(得分:0)
删除firstView.layer.masksToBounds = true
,因为它会导致视图剪掉阴影,因为它在技术上超出了界限。
此外,如果您想要的只是跟随视图形状的正常阴影,您也可以删除firstView.layer.shadowPath = UIBezierPath(rect: firstView.bounds).CGPath
答案 4 :(得分:0)
masksToBounds = true
,它会隐藏你的影子。
解决此问题的一种方法是在firstView:
UIView *shadowView = [UIView new];
shadowView.frame = firstView.frame;
shadowView.layer.shadowOffset = CGSizeMake(0, 5);
shadowView.layer.shadowOpacity = 0.5
shadowView.layer.shadowPath = UIBezierPath(rect: shadwoView.bounds).CGPath;
[self.view insertSubview:shadowView belowSubview:firstView];