约束会影响UIView的阴影吗?

时间:2019-01-09 18:21:17

标签: ios swift xcode

我正在尝试在ViewController的UIView的所有四个侧面上建立阴影-效果非常好,直到我通过Xcode向UIView添加约束为止。如何在所有侧面都设置有约束的情况下使UIView在所有四个侧面上显示的阴影?

从本质上讲,我发现的是,每当我通过Xcode对设置了阴影的UIView应用约束时,该阴影都不会出现在UIView的所有四个侧面下。相反,它漂浮在左侧,完全保留了右侧和底部,而没有阴影。可以在下面的屏幕截图中看到。

https://imgur.com/a/bZgYPH8

<div class="container">
  <div class="large">1</div>
  <div class="small">2</div>
  <div class="small">3</div>
  <div class="small">4</div>
  <div class="small">5</div>
</div>

为什么会发生这种情况?如何在保持预期结果的同时添加约束?

1 个答案:

答案 0 :(得分:1)

在viewDidLoad中,您的约束尚未生效。因此,当您创建UIBezierPath时,边界不会更新为自动布局约束。使用的范围可能是您的.xib文件中的范围。

将shadowMakingPath移动到viewDidLayoutSubviews

override func viewDidLayoutSubviews() {
   super.viewDidLayoutSubivews()
   signUpView.layer.shadowPath = UIBezierPath(roundedRect: signUpView.bounds, cornerRadius: signUpView.layer.cornerRadius).cgPath
   signUpView.layer.shouldRasterize = true
   signUpView.layer.shadowColor = UIColor.black.cgColor
   signUpView.layer.shadowOffset = .zero
   signUpView.layer.shadowOpacity = 1
   signUpView.layer.shadowRadius = 20
   signUpView.layer.masksToBounds = false
}

更多信息.. Objective-C/Swift (iOS) When are the auto-constraints applied in the View/ViewController work flow?