【问题标题】:Shadow is not displaying on UIViewUIView 上不显示阴影
【发布时间】:2016-04-30 03:13:40
【问题描述】:

我有一个 ViewController,在那个控制器中有两个 UIView。

我想在第二个 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

【问题讨论】:

  • 勾选shadowOpacity,默认为0

标签: ios swift uiview uiviewcontroller shadow


【解决方案1】:

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

firstView.layer.masksToBounds = false

如果masksToBounds 属性为true,则视图边界之外的任何内容都将被剪裁到这些边界。

【讨论】:

  • @ThirdMartian 好吧...我不知道...可能是别的东西...我完全按照您发布的方式运行您的代码。我只将true 更改为false 并制作了阴影偏移CGSizeMake(0, 25),所以我可以清楚地看到阴影。它奏效了。
  • 无论如何,我不得不更改情节提要中的顺序,谢谢您的帮助!
  • @ThirdMartian 这很可能为时已晚,但对于未来的人来说,firstView.clipsToBounds = false 也是必要的,以防万一之前设置为 true
【解决方案2】:

如果您有两个视图 view1view2view2 就在 view1 的下方,那可能是 view2 覆盖了 view1 的影子。当view2view1 之后添加为子视图时,就会发生这种情况。

在添加view2 后添加view1 作为子视图,或者在某个时候调用[superview bringSubviewToFront:view1]

【讨论】:

  • 这样一个简单的问题,一旦我读到这个问题就很明显了。谢谢。
【解决方案3】:

斯威夫特 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属性为假

    firstView.clipsToBounds = false
    
  • firstView backgroundColor 不应该是清晰的颜色

    firstView.backgroundColor = UIColor.white
    

【讨论】:

    【解决方案4】:

    删除firstView.layer.masksToBounds = true,因为它会导致您的视图剪掉阴影,因为它在技术上超出了它的界限。

    此外,如果您想要的只是跟随视图形状的正常阴影,您也可以删除 firstView.layer.shadowPath = UIBezierPath(rect: firstView.bounds).CGPath

    【讨论】:

      【解决方案5】:

      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];
      

      【讨论】:

      • 别忘了添加shadowRadiusshadowColor
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2017-09-06
      相关资源
      最近更新 更多