为啥 viewDidLoad 在 vi​​ewWillAppear 之前被调用? [复制]

Posted

技术标签:

【中文标题】为啥 viewDidLoad 在 vi​​ewWillAppear 之前被调用? [复制]【英文标题】:why viewDidLoad gets called before viewWillAppear? [duplicate]为什么 viewDidLoad 在 vi​​ewWillAppear 之前被调用? [复制] 【发布时间】:2015-11-17 07:12:00 【问题描述】:

我想在视图出现之前执行代码,但 viewDidLoadviewWillAppear 之前被调用。为什么会这样??

【问题讨论】:

【参考方案1】:

ViewDidLoad 在视图加载到内存时被调用。即,如果您使用的是故事板,则应用程序已取消归档视图并将其加载到内存中(尚未在屏幕上显示)。

当应用准备好在屏幕上加载视图时,它将调用 viewWillAppear 方法。

在您的情况下,如果您想在视图出现在屏幕上之前执行代码,您可以在 viewDidLoad 或 viewWillAppear 中添加它。

【讨论】:

【参考方案2】:

因为视图需要加载到内存中才能显示。 您需要进一步了解视图生命周期。检查this link。

只有在视图及其元素加载到内存后,视图才会绘制到屏幕上,并分别调用 viewWillAppear 和 viewDidAppear。

如果您需要在视图出现之前执行代码,您需要使用viewWillAppear 方法。

【讨论】:

【参考方案3】:

我只是想提供更多信息,也许会对您有所帮助。 如果您使用约束,您可以查看:

- viewDidLayoutSubviews()

调用以通知视图控制器其视图刚刚布局 它的子视图。

所以它会在你应用了约束之后被调用。

【讨论】:

以上是关于为啥 viewDidLoad 在 vi​​ewWillAppear 之前被调用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥“numberOrRowsInSection”在“viewDidLoad”中途被调用?

为啥在 ViewDidLoad 中没有设置 GLKView 的 DrawableWidth?

为啥在 viewDidLoad 中添加子视图不起作用

为啥 viewDidLoad 中的 self.navigationController 为空?

为啥viewDidLoad在swift中完成时不显示数据? [关闭]

为啥 viewDidLoad() 中不存在 TableView 的 FooterView 以及如何解决?