首页 > 解决方案 > 这是布局我的视图控制器的好方法吗

问题描述

人们通常会获得真实的帧大小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
}

标签: iosswift

解决方案


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/


推荐阅读