在工具栏/标签栏之间交替

Posted

技术标签:

【中文标题】在工具栏/标签栏之间交替【英文标题】:alternating between toolbar / tab bar 【发布时间】:2013-11-28 12:05:15 【问题描述】:

我的应用程序结构如下:UITabBarController > UINavigationController > ViewControllerOne > ViewControllerTwo。 UINavigationBar 在底部有标签栏,现在当用户导航到第二个视图控制器时,我希望能够隐藏标签栏并用工具栏替换。我试过这段代码:

[self.navigationController.tabBarController.tabBar setHidden:YES];
[self.navigationController.toolbar setHidden:NO];

当我运行应用程序时,标签栏被隐藏,但工具栏没有出现。另外,由于最后一个 VC 是一个表格视图控制器,当我滚动单元格时,表格和视图底部之间有一个白色间隙。我该如何解决?

【问题讨论】:

你在哪里调用这个方法?是 viewDidAppear: 吗?如果不尝试将其移到那里。 @Greg 我没有放在那里,我试过了,但没有用。我从第二个视图控制器的检查器中启用了工具栏并添加了一个项目(也将它连接到我的类)。但它不起作用。什么都没有显示,仍然有一个白色的差距。感谢您的意见。 @Greg 在检查器中的模拟指标下没问题,我检查了“显示工具栏”现在它正在显示,但是标签栏和工具栏在每个 toher 上。我会想办法解决这个问题的。 【参考方案1】:

这是行不通的,因为当您隐藏标签栏时,子视图将无法正确调整(这就是您获得空白的原因)。你必须使用

self.hidesBottomBarWhenPushed = YES;

在你的 init 方法或 awakeFromNib... 然后

[self.navigationController setToolbarHidden:NO animated:YES];

以 viewDidLoad 为例。

这样,当您隐藏标签栏时,标签栏控制器的视图将正确布局它的子视图。只要记住调用 self.hidesBottomBarWhenPushed = NO;在您的第一个视图控制器中,否则当从导航堆栈中弹出第二个视图控制器时,标签栏仍将隐藏。

【讨论】:

感谢您的意见!它确实奏效了!但是,我将它放在源视图控制器而不是目标视图控制器中。我把它放在prepareForSegue中:不在init中。 谢谢!这帮助我完成了我的项目。 我对是在第一个 VC 还是第二个 VC 中调用 hidesBottomBarWhenPushed 感到困惑。最后为第二个 VC 调用了 awakeFromNib,它就像一个魅力。 (添加到 ViewDidLoad 时不起作用)【参考方案2】:

尝试为工具栏分配适当的框架并将其添加到 self.tabBarController.view

【讨论】:

以上是关于在工具栏/标签栏之间交替的主要内容,如果未能解决你的问题,请参考以下文章

隐藏 uitoolbar 在视图和标签栏之间留下空隙

隐藏标签栏并在该位置添加工具栏

在任何 UIViewControllers 之间交替?

Jmeter工作界面介绍

Jmeter工作界面介绍

jmeter界面介绍