我在我的某个方法中创建UIView
并完成将其添加到视图中的所有步骤:
background1 = UIView(frame: CGRectInset(other.frame, -thickness, -thickness))
background1!.backgroundColor = aColor
background1!.hidden = false
container.addSubview(background1!)
这包含在我在viewDidAppear()
中调用的方法中。一般来说,一切都很完美。但是,在第一次打开应用程序时,此视图会显着出现。
我可以告诉您,在上述代码之前和之后设置断点时,background1
在执行代码后不会立即出现在屏幕上,即使在任何我能够设置的地方也是如此断点。
我没有对视图做任何其他事情 - 由于某种原因,加载会花费很多令人烦恼的时间。
我有一个非常复杂的(通过> 114评论here)布局设置,它是AutoLayout和部分程序化的部分,因此如果可能的话,我希望单独解决这个问题,撕掉其他一切。
我知道viewDidAppear()
当然在视图出现后被称为 ,这意味着执行的代码应该生效,但是从我所知道的,background1
甚至没有出现在那一点上。
此外,正如您在我发布的代码的第一行中看到的那样,background1
' s frame
依赖于other
的另一个子视图。此视图的框架由AutoLayout确定。 From what I understand,只保证在调用frame
后报告正确的viewDidLayoutSubviews()
。 (顺便提一下,这甚至在viewDidLoad()
之后调用。)
我知道我已经通过混合AutoLayout和程序化布局犯了一个错误,但我希望有一种方法来挽救这一点。事实上,我确实记得,在以前版本的时候几乎完全相同的设置工作。 (回过头来看,我无法找到它。)
要明确,我想我是否有办法在代码执行时强制UIView
出现。我已经试着打电话给父母layoutSubviews()
,但这似乎没有用。
谢谢。