Tab Bar 子 viewWillAppear 不会触发,添加 NavigationController 会给出两个导航栏

Posted

技术标签:

【中文标题】Tab Bar 子 viewWillAppear 不会触发,添加 NavigationController 会给出两个导航栏【英文标题】:Tab Bar child viewWillAppear doesn't fire, adding NavigationController gives two navigation bars 【发布时间】:2015-08-17 03:32:30 【问题描述】:

我正在尝试完成我的第一个 ios 应用程序。

我的故事板布局是这样的:

Navigation Controller
'-> View Controller
    '->Tab Bar Controller
       |->Table View Controller
       |  '->View Controller
       '->Table View Controller
          '->View Controller

所有视图都通过推送(非模态)显示,因此需要后退导航。问题是当我从最后一个视图返回到表视图时,viewWillAppear 不会触发。所以我添加了导航控制器:

Navigation Controller
'-> View Controller
    '->Tab Bar Controller
       |->Navigation Controller
       |  '->Table View Controller
       |     '->View Controller*
       '->Navigation Controller
          '->Table View Controller
             '->View Controller

这解决了 viewWillAppear 问题,但是标签栏仍然显示在底部,并且我在表格视图和最终视图中获得了一个额外的导航栏(见下文 - 对应于上面的 *)。按顶部的“

问题:

我在这里做错了什么??? 什么时候视图应该有一个 NavigationController?是否可以为整个故事板提供一个,或者我应该拥有更多。 如果我将导航控制器放在标签栏之后,底部的标签栏会保留。我该如何摆脱它? 我应该避免使用标签栏吗?

更新:

这很奇怪。如果我重新创建故事板,我可以将其缩小到初始视图控制器/导航控制器对。不知道可能是什么问题,因为将它们换成新的就可以解决问题。

【问题讨论】:

你设置了第一个导航控制器的框架吗..?请出示您的代码 sn-p。 @SweetAngel 这一切都在故事板中。我浏览了代码以查看它之间是否有任何区别,但找不到。我认为问题可能是制作了 NavigationItem,然后嵌入到 NavigationController 中。 【参考方案1】:

来自Apple UITabbarController Docs

您可以使用导航控制器或自定义视图控制器作为选项卡的根视图控制器。如果根视图控制器是导航控制器,则标签栏控制器会进一步调整显示的导航内容的大小,使其不与标签栏重叠。

应该调用 TableVC 的ViewWillAppear,无论它是否嵌入在 navigationController 中。

是否避免使用标签栏以及情节提要的单个导航控制器与应用程序设计相关。

【讨论】:

我刚刚在没有 TabBar 控制器的情节提要中重新创建了它,并且没有任何问题。

以上是关于Tab Bar 子 viewWillAppear 不会触发,添加 NavigationController 会给出两个导航栏的主要内容,如果未能解决你的问题,请参考以下文章

在 Tab 主机 android 中打开子活动

点击 Tab bar 过滤列表 Flutter

《iOS Human Interface Guidelines》——Tab Bar

iOS 中的 Bar 部分被不必要地扩展

queryForTable viewDidAppear、viewWillAppear 等不适用于子视图

viewDidLoad 和 viewWillAppear 中的不同子视图布局 [重复]