我正在尝试在ViewController的UIView的所有四个侧面上建立阴影-效果非常好,直到我通过Xcode向UIView添加约束为止。如何在所有侧面都设置有约束的情况下使UIView在所有四个侧面上显示的阴影?
从本质上讲,我发现的是,每当我通过Xcode对设置了阴影的UIView应用约束时,该阴影都不会出现在UIView的所有四个侧面下。相反,它漂浮在左侧,完全保留了右侧和底部,而没有阴影。可以在下面的屏幕截图中看到。
<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>
为什么会发生这种情况?如何在保持预期结果的同时添加约束?
答案 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?