UINavigationController 从后台返回后失去对视图的跟踪

Posted

技术标签:

【中文标题】UINavigationController 从后台返回后失去对视图的跟踪【英文标题】:UINavigationContoller loses track of views after returning from background 【发布时间】:2013-12-06 01:42:06 【问题描述】:

我有一个UINavigationController 设置为rootViewController 在一个仅限ios7 的应用程序中的TabBarController。导航效果很好:我可以推送新视图并使用左上角的后退按钮或滑动/弹出手势向后导航。

但是,如果我将应用程序放在后台,除了导航控制器中显示的根视图之外,我会遇到这个问题:如果我使用向后滑动手势,则没有弹出动画 - 视图立即消失,我离开了与底层视图。缺少滑动动画不是什么大问题,但真正的问题是导航控制器中的标题现在关闭了。它仍然认为我在刚刚消失的视图控制器上!

例如:

我在导航控制器中的根视图将具有标题“设置” - 然后我将推送“外观” VC,使用主页按钮 - 重新打开应用程序,然后尝试向后滑动手势。这让我回到“设置”,但标题仍然显示“。现在,如果我按下另一个 VC,新 VC 上的标题会显示 “设置”,并且没有返回按钮!

只有当我使用弹出手势时才会发生这种情况 - 当我使用导航栏后退按钮时不会发生这种情况。

我试图通过将NSLog 放入 dealloc 来检查问题是否是我的 VC 被释放,但这不是问题。

我也试过放一个:

NSLog("Hierarchy: %@",  [self.navigationController viewControllers]);

在两个视图中都会出现和消失,以查看导航控制器上的堆栈是否混乱 - 但这不是问题 - 堆栈是正确的。

非常感谢任何有关如何进一步调试或我可能做错的建议!这发生在我的 iPhone 和模拟器上,这让我抓狂。

【问题讨论】:

【参考方案1】:

好的,多亏了这个答案,我终于能够弄清楚发生了什么:

https://***.com/a/15945415/492505

原来我正在运行以下命令:我的应用程序中的[[self.tabBarController selectedViewController] viewWillAppear:NO]; 确实处于活动状态。

希望这对其他人有所帮助。

【讨论】:

以上是关于UINavigationController 从后台返回后失去对视图的跟踪的主要内容,如果未能解决你的问题,请参考以下文章

带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller

带有 UINavigationController 的 UITabBarController,在 hidesBottomBarWhenPushed 上隐藏 UINavigationController

在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?

UINavigationController 与 AppDelegate 中的 UISegmentedControl 切换 UINavigationController 的 rootviewcontr

从一个 UINavigationController 到另一个 UINavigationController (Swift iOS 9, xcode 7)

UINavigationController