无论选择哪个选项卡,都显示顶部栏

Posted

技术标签:

【中文标题】无论选择哪个选项卡,都显示顶部栏【英文标题】:showing top bar no matter which tab selected 【发布时间】:2017-08-23 11:06:17 【问题描述】:

我正在使用 xcode 8 和 Swift 3 开发 ios 项目。

我知道如何制作标签栏控制器,我知道如何制作导航控制器。但我想要实现的是如下截图:

如您所见,屏幕底部有标签,这意味着它使用标签栏控制器,我知道该怎么做。但顶部栏始终显示,只有标题更改为相应的选项卡名称。

我的问题:

无论选择哪个标签,如何让这个顶部栏始终显示?

我是否需要将每个选项卡的视图嵌入到 导航控制器 中才能实现这一点?还是有更好的方法?

===== 更新 =====

感谢您的回答,我会将每个选项卡视图嵌入到导航控制器中。但是现在,我有一个新问题,将它们划分为单独的故事板的最佳做法是什么?以及如何划分为多个storyboard?

【问题讨论】:

是的,您必须在每个选项卡中嵌入一个导航控制器才能显示导航栏。这将使您的生活变得轻松。如果您不想添加导航控制器,请在主窗口中添加带有标签和其他项目的自定义视图并进行相应调整。 我也遇到了类似的问题。将每个选项卡视图嵌入到导航控制器中就可以了。 【参考方案1】:

要实现这样的功能,您必须将每个选项卡插入导航控制器,或者您可以在每个选项卡中实现模仿 navBar 的重叠视图(这是一个坏主意)。

【讨论】:

【参考方案2】:

将每个选项卡插入导航控制器就可以了。以及在单个故事板中使用所有内容的最佳实践。为什么要将它们划分为单独的故事板?与 xibs 相比,它会占用更多的负载。

【讨论】:

因为如果把所有东西都放在同一个storyboard上,当一个开发团队一起工作时,可能会导致合并冲突。此外,一般来说最好的做法是让每个故事板代表一个视图/页面,请参阅这篇文章:medium.com/ios-os-x-development/…【参考方案3】:

使用 UIViewController 的 title 属性在每个视图控制器的生命周期方法(viewDidLoad 或 viewWillAppear)中以编程方式设置视图控制器的标题。

var title: String? get set

将标题设置为描述视图的人类可读字符串。如果 视图控制器有一个有效的导航项或标签栏项, 为该属性赋值会更新这些属性的标题文本 对象。

override func viewDidLoad() 
    super.viewDidLoad()
    self.title = "view controller title"

    // or you can try one of these
    // navigationBar.topItem.title = "view controller title"
    // self.navigationItem.title = "view controller title"

您还可以在使用视图控制器执行推送/呈现操作之前设置标题属性。

testViewControllerInstance.title = "view controller title"

第二个问题的答案(更新的问题): 最好为每个选项卡创建单独的故事板,因为会有更多导航流程(更多视图控制器)与选项卡的根控制器相关联。

为避免复杂性,您应该为标签栏的每个模块(根控制器)创建单独的故事板。

有两种方法可以创建/分离故事板:

    如果您已经将视图控制器放在单个故事板中,请重构您的故事板。 (Xcode 菜单栏) >> 编辑器 >> 重构你的故事板..

2. 创建新的/单独的故事板。 (Xcode菜单栏)>>文件>>新建>>文件>>故事板>>下一步>>创建

【讨论】:

以上是关于无论选择哪个选项卡,都显示顶部栏的主要内容,如果未能解决你的问题,请参考以下文章

iOS:选择选项卡之前的选项卡栏项目标题

如何在1项标签栏控制器中制作顶部标签栏以在swift中显示多个视图控制器?

在三个视图控制器之间导航,其中三个视图控制器都在一个选项卡栏视图中

如何隐藏操作栏,但保留选项卡导航按钮?

如何根据设置选择在选项卡栏视图中创建动态更新的视图?

单击选项卡时返回 UINavigationController 堆栈的顶部?