【发布时间】:2019-10-02 13:09:41
【问题描述】:
我以前遇到过这个问题,通常可以通过将代码放在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()。没有任何工作。真的很感激一些帮助!
【问题讨论】:
-
layer.addSpread是自定义/扩展函数吗? -
@Alexander Custom,尽管我删除了问题仍然存在
-
这些视图是在 .xib 还是情节提要中绘制的?
-
@summerfinn3 故事板
-
不要把它放在
viewWillLayoutSubviews(),因为它可能在视图的生命周期中被多次调用。看起来你有一些累积的变化,每次调用方法时,这些变化开始累加。此外,这在您不需要每次都重置阴影属性的意义上是低效的;该层可以很好地记住它们。