将 UITabbarController 放在 UINavigationController 中。可能会出现啥问题?

Posted

技术标签:

【中文标题】将 UITabbarController 放在 UINavigationController 中。可能会出现啥问题?【英文标题】:Putting UITabbarController inside UINavigationController. What problem may occur?将 UITabbarController 放在 UINavigationController 中。可能会出现什么问题? 【发布时间】:2019-02-25 11:49:50 【问题描述】:

我有一个类似于层次结构的堆栈(我使用的是编程方式,所以我做到了)

UINavigationController -> UITabbarController -> UInavigationController -> UIViewController
                                             -> UInavigationController -> UIViewController

正如 Apple Docs 所说的 pushViewController

要压入堆栈的视图控制器。此对象不能是标签栏控制器

我需要知道这是否有已知的错误,或者肯定会导致错误。

我确实搜索了很多类似的帖子,但没有一个给我一个可以接受的答案。 Using UITabBarController with UINavigationController - Swift 3

Can you push a UITabBarController inside an UINavigationController

【问题讨论】:

既不会导致错误,也不会导致错误。只是苹果希望您在标签栏控制器中为不同的标签提供不同的堆栈。虽然上面提到的堆栈仍然可以实现但不推荐,也不是正确的方法。 感谢您的回答。如果我们能从官方/可靠来源获得一些答案,那就太棒了。 发布了来自苹果的参考 【参考方案1】:

来自Apple:

在创建标签栏界面之前,您需要确定您的意图 使用标签栏界面。因为它强加了一个总体 组织你的数据,你应该只在这些特定的 方式:

直接将其安装为窗口的根视图控制器。 安装为 拆分视图界面中的两个视图控制器之一。 (仅限 iPad) 从另一个视图控制器以模态方式呈现它。 从 弹出框。 (仅限 iPad)

在应用的主界面中安装标签栏界面 window 是迄今为止最常见的使用方式。 在这样的场景下, 标签栏界面提供了基本的组织原则 对于您的应用程序的数据,每个选项卡都会将用户引导到不同的部分 的应用程序。您可以单独使用标签栏控制器,也可以在 与其他视图控制器一起创建更多 复杂的接口。有关详细信息,请参阅组合视图 控制器接口。

如果一个非常 特定的需要使得这样做是值得的。例如,您可以 以模态方式显示标签栏控制器以编辑一些复杂的 具有几组不同选项的数据集。因为模态 视图填满整个或大部分屏幕(取决于设备), 标签栏的存在只会反映可用的选择 查看或编辑模态呈现的数据。避免使用标签栏 如果有更简单的设计方法可用,则采用这种方式。

【讨论】:

感谢您的参考。我仍然很好奇为什么我们不能使用它。 正如它所说的你可以使用它,但苹果不推荐它。大多数苹果用户习惯将标签栏作为根控制器。 据我了解,他们说“你可以使用它,但我们不推荐它”以模态方式呈现标签栏。在我的情况下,我使用 pushViewController 并且在 pushViewController 的文档中它说“你不能”

以上是关于将 UITabbarController 放在 UINavigationController 中。可能会出现啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 UITabBarController 更新子视图?

包含工具栏和 UITabBarController 的 UIView 控制器

UITabBarController的使用

如果我使用 UITabBarController,是不是需要在所有屏幕中添加导航栏项目?

没有标签栏项目的 UITabBarController 中的 UIViewController

将ISO文件放在支持启动的U盘可以用吗