阴影不会显示在UIView上

时间:2016-01-23 15:06:49

标签: ios swift uiview uiviewcontroller shadow

我有一个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

5 个答案:

答案 0 :(得分:14)

如果您将maskToBounds设置为false,则应显示阴影。

firstView.layer.masksToBounds = false

如果masksToBounds属性为true,那么超出视图边界的任何内容都将被剪切到这些边界。

答案 1 :(得分:6)

如果您有两个观看次数view1view2,而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];