iOS 10这个不断突破的礼物,似乎改变了另一种行为。
假设两个 UIViewController 被推送到一个 UINavigationController 上。
在 iOS 8/9 上,调用navigationController?.popViewController(animated: true)
弹出顶部 UIViewController (比如 VC2)导致viewDidLayoutSubviews
在底部视图控制器(例如 VC1)上被调用。
我们就靠这个来刷新VC1。有时,VC2 向 VC1 添加子视图(通过数据模型),这需要在弹回到 VC1 时得到反映。
需要准确的帧信息。我们不能使用viewWillAppear
因为iOS 9 上的帧数据错误 https://stackoverflow.com/questions/32662851/ios-9-frame-no-longer-set-in-viewwillappear-after-uinavigationcontroller-pushvi。问题在于viewDidAppear
是在最初看到视图和调整之间存在短暂的故障。
现在VC1的viewDidLayoutSubviews
弹出 VC2 时不会调用。
1)这是一个错误吗?viewDidLayoutSubviews
不被调用?
2)使用 UINavigationController 弹出时刷新视图控制器的正确方法是什么?
依靠viewDidLayoutSubviews
从来都不是正确的解决方案。UIViewController
提供viewWillAppear:
or viewDidAppear:
对于这样的用途。当 VC2 从导航控制器弹出时,将在 VC1 上调用这两个方法,让您知道它将或现在再次可见。
viewDidLayoutSubviews
只能用于调整视图框架和布局。
viewWill|DidAppear:
应该用于处理视图控制器最初或再次可见。在您的情况下,您应该使用它来更新数据并根据需要添加/更新视图。这些新视图应该根据视图控制器的当前框架进行设置。它们将在您实施时进行调整viewDidLayoutSubviews
如所须。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)