人们通常在viewDidAppear()
或viewDidLayoutSubviews()
中获得实际的帧大小来计算他们的视图,但是我通常会遇到这些方法的问题。
我希望在视图出现在屏幕上之前已经计算出视图,因此viewDidAppear()
不适合,viewWillAppear()
有时可行,有时则不可行。 viewDidLayoutSubviews()
被调用了很多次,所以也不是一个好选择。
因此,下面是我的处理方法,通过这种方法,我始终可以获得预期的结果。这有什么缺点吗?
override func viewDidLoad() {
super.viewDidLoad()
self.view.frame = UIScreen.main.bounds
self.view.layoutIfNeeded()
// put everything needs to be calculated here
}
答案 0 :(得分:0)
您不需要那样布置视图。
现代的Apple建议是避免对框架进行手动更改。
答案 1 :(得分:0)
layoutIfNeeded
来自文档:Lays out the subviews immediately, if layout updates are pending.
这是一个同步调用,它告诉系统您希望对视图及其子视图进行布局和重绘,并且希望立即完成而不等待更新周期。
https://developer.apple.com/documentation/uikit/uiview/1622507-layoutifneeded
您还应该在今年观看此WWDC视频 https://developer.apple.com/videos/play/wwdc2018/220/
答案 2 :(得分:0)
将代码放入viewLayoutSubViews dwlwgate方法。