在 popToRootViewController 之后没有显示标签栏

Posted

技术标签:

【中文标题】在 popToRootViewController 之后没有显示标签栏【英文标题】:Tabbar is not showing up after popToRootViewController 【发布时间】:2017-04-28 05:22:01 【问题描述】:

在我的应用程序中,我通过设置UIViewControllerhidesBottomBarWhenPushed 属性来隐藏标签栏。我不确定是否设计了这种行为,当我调用popToRootViewController 来弹出所有视图控制器堆栈时,如果我之后推送相同的视图控制器,选项卡栏不会正确显示。即使我在调用popToRootViewController 后尝试通过设置isHidden 属性来显示标签栏,但它也不起作用。奇怪的是,在标签栏消失后,我推送了相同的视图控制器,当我尝试使用手势弹出(滑动弹出)来弹出视图控制器(不是 popToRootViewController)时,我可以看到标签栏。虽然它在过渡完成后消失了。

仅供参考,这是逐步产生这种行为的。

    在两个选项卡上初始化选项卡栏和导航控制器。 在一个选项卡的导航控制器上推送视图控制器(hidesBottomBarWhenPushed 为真) 通过调用popToRootViewController从导航控制器弹出所有视图控制器 4 通过在tabbarController 上设置selectedIndex 来更改标签索引 推送同一个视图控制器

hidesBottomBarWhenPushed 属性如何详细显示/隐藏标签栏?

【问题讨论】:

你能在第 2 步用你的代码编辑帖子吗? 【参考方案1】:

我会在我的应用中讨论这个问题。

对于每个页面,我都会编辑self.navigationController?.navigationBar.isHiddenself.tabBarController?.tabBar.isHidden = false 以保证viewWillAppeartabBarnavigationBar 的状态。

示例

// In this viewController, I'll show the navigation bar and hide tab bar
override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.isHidden = false
    self.tabBarController?.tabBar.isHidden = true

navigationBartabBar 可以在您推送新视图控制器或弹出旧视图控制器时保持其状态。所以它会让我们在每个视图控制器中设置来控制和确保它的状态如我所愿。

【讨论】:

以上是关于在 popToRootViewController 之后没有显示标签栏的主要内容,如果未能解决你的问题,请参考以下文章

在 popToRootViewController 之后未调用 viewWillAppear 方法

从另一个选项卡调用 popToRootViewController

当 tableView 仍在滚动时 popToRootViewController 崩溃

popToRootViewController 前进动画

popToRootViewController 在导航栏上带来最后一个视图

单击按钮时的poptorootviewcontroller