我以前曾遇到过此问题,通常可以通过将代码放在viewWillLayoutSubviews()
中来解决此问题。这可以在我拥有的所有其他视图控制器中使用,但我找不到解决方案。
我有一个UIView
,并且正在像这样添加阴影:
func setUpUI() {
for tile in roundedTiles {
tile.layer.cornerRadius = t.frame.height/2
tile.layer.shadowColor = UIColor.black.cgColor
tile.layer.shadowRadius = 10.0
tile.layer.shadowOpacity = 0.15
tile.layer.addSpread(spread: -10)
tile.layer.borderColor = GlobalConstants.Colors.lightGray.cgColor
tile.layer.borderWidth = 1
}
}
然后我在这里称呼它
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
setUpUI()
}
但是,它看起来像这样:
这是应该从正确显示的另一个视图控制器中提取的样子(我在那儿写的代码完全一样):
在查看了其他StackOverflow问题之后,我尝试将其移至viewDidLayoutSubviews()
,viewDidLoad()
,并添加tile.layoutIfNeeded()
。什么都没用。非常感谢您的帮助!
答案 0 :(得分:0)
首先,我建议为您的图块子类化UIView,并在init方法中添加阴影和圆角,而不是通过父视图控制器添加阴影和圆角。
获得带有阴影的圆角的技巧是将阴影添加到视图本身,然后为圆角添加子视图,您可以在不影响父级的情况下将其蒙版到边界。
所以:
class roundedTile: UIView {
required init?(coder: NSCoder) {
super.init(coder: coder)
self.layer.cornerRadius = self.frame.height/2
// Add shadow to parent view
self.layer.shadowColor = UIColor.black.cgColor
self.layer.shadowOffset = CGSize(width: 5.0, height: 0.0)
self.layer.shadowOpacity = 0.15
self.layer.shadowRadius = 10.0
// Create subview for rounded corners
let subView = UIView()
subView.frame.size = self.frame.size
subView.layer.cornerRadius = frame.height/2
subView.layer.borderColor = UIColor.lightGray.cgColor
subView.layer.borderWidth = 1
subView.layer.masksToBounds = true
self.addSubview(subView)
}
}
季节,以品尝阴影偏移/半径/不透明度。