iOS 10是一个不断突破的礼物,似乎改变了另一种行为。

假设将两个UIViewControllers推送到UINavigationController上。

在iOS 8/9上,调用navigationController?.popViewController(animated: true)弹出顶部UIViewController(例如VC2)会导致调用底部视图控制器(例如VC1)上的viewDidLayoutSubviews

我们依靠此来刷新VC1。有时VC2(通过数据模型)将子视图添加到VC1,这需要在弹出VC1时得到反映。

需要准确的帧信息。我们不能使用viewWillAppear,因为frame data is wrong on iOS 9viewDidAppear的问题在于,最初看到视图和进行调整之间存在短暂的故障。

现在,弹出VC2时不会调用VC1的viewDidLayoutSubviews

1)这是viewDidLayoutSubviews不被调用的错误吗?

2)用UINavigationController弹出时刷新视图控制器的正确方法是什么?

最佳答案

依赖viewDidLayoutSubviews永远不是正确的解决方案。 UIViewController为此提供了viewWillAppear:viewDidAppear:。从导航控制器弹出VC2时,将在VC1上调用这两种方法,以使您知道将会再次出现或现在再次可见。
viewDidLayoutSubviews仅应用于调整视图框架和布局。
viewWill|DidAppear:应该用于处理视图控制器原来或再次可见。在您的情况下,您应该使用它来更新数据并根据需要添加/更新视图。这些新视图应基于视图控制器的当前框架进行设置。它们将在您的viewDidLayoutSubviews实现中根据需要进行调整。

关于ios - 使用UINavigationController弹出顶 View 时不再调用viewDidLayoutSubviews,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39780470/

10-12 14:43