2013-11-28 67 views
7

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

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

当我运行应用程序标签栏被隐藏但工具栏不出现。加上,因为最后一个VC是一个表视图控制器,当我滚动单元格时,表和视图底部之间有一个白色的间隙。我该如何解决这个问题?

+0

你在哪里调用这个方法?它是viewDidAppear:?如果不尝试在那里移动它。 – Greg

+0

@Greg我没有放在那里,我试过但它没有奏效。我启用了第二个视图控制器上的检查器的工具栏,并添加了一个项目(也将它连接到我的班级)。但它不起作用。没有任何表现,还有一个白色的差距。感谢您的意见。 – HusseinB

+0

@Greg在模拟的指标下,检查员没问题,我检查了“显示工具栏”现在显示,但标签栏和工具栏都在每个托盘上。我会找到解决这个问题的方法。 – HusseinB

回答

10

这是行不通的,因为当你隐藏这样子视图不会被适当地调整了标签栏(这就是为什么你得到空白)。你将不得不使用

self.hidesBottomBarWhenPushed = YES; 

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

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

在viewDidLoad中为例。

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

+0

感谢您的意见!它确实有用!然而,我把它放在源视图控制器而不是目标视图控制器。我把它放在prepareForSegue中:不在init中。 – HusseinB

+0

谢谢!这帮助我完成了我的项目。 – anna

+0

我很困惑是否调用hidesBottomBarWhenPush在第一个VC或第二个VC。最后在awakeFromNib中调用第二个VC,它的功能就像一个魅力。 (添加到ViewDidLoad时没有工作) –

0

尝试分配适当的框架工具栏,并添加它来self.tabBarController.view