使用UINavigationController的UITabBarController,隐藏hidesBottomBarWhenPushed上的UINavigationController工具栏,而不是UITabBarController标签栏

时间:2012-01-13 05:06:16

标签: ios uinavigationcontroller uitabbarcontroller

我有一个UITabBarController根视图控制器,其中包含三个视图控制器,其中一个是UINavigationControllerUIViewController包含UISearchDisplayControllerUITableView 。 {隐藏UINavigationController工具栏。

但是,当我在UITableView中选择一行时,我想推送另一个UIViewController。按下UIViewController后,UINavigationController工具栏应滑出,UITabBarController标签栏应保持可见。

我尝试将推送的UIViewController的hidesBottomBarWhenPushed属性设置为true(当UINavigationController未嵌套在UITabBarController中时,它提供了预期的行为)。不幸的是,当hidesBottomBarWhenPushed设置为true时滑出UINavigationController工具栏,而UITabBarController会滑出,将UINavigationController显示在推送UIViewController中作为底栏。

推送时如何滑出UINavigationController工具栏,而不是UITabBarController标签栏?

编辑#1 : 我能想到的唯一可能的解决方案是,只需将UINavigationController添加到包含UIToolbar的{​​{1}}视图的底部,而不是使用UIViewController工具栏。这将确保UITableView在推送​​新UIToolbar时滑出,并在弹出新UIViewController时滑入。唯一的问题是,对于iPhone和iPod Touch,与UIViewController工具栏不同,UINavigationController实例(44像素)的高度不会缩小到30+像素的高度(如{{1当设备旋转到横向时,工具栏会)。如果这是唯一合法的解决方案,我如何更改UIToolbar的高度以匹配横向中UINavigationController工具栏的高度?

编辑#2 : 关于编辑#1,我想可以在UIToolbar方法中更改UINavigationController的帧。不过,我仍然希望找到一个滑出UIToolbar工具栏的解决方案。比为每个willRotateToInterfaceOrientation创建单独的UINavigationController更好,我希望有一个底部工具栏。

编辑#3 : 基本上,这就是我所拥有的(这是hidesBottomBarWhenPushed的结果):http://flic.kr/p/bcjydn

而且,这就是我想要实现的目标:http://flic.kr/p/bcjybK

编辑#4 : 首先,谢谢你的时间。其次,遗憾的是,UINavigationController中的setToolbarHidden:animated:方法无法生成动画中的滑出/滑动,如setHidesBottomBarWhenPushed所示:(请参阅编辑#3 中的链接,特别是第二个链接,为期望的动画)。例如,假设我们写:

UIToolbar

在父视图控制器(未隐藏工具栏的视图控制器)中,并假设我们写:

UIViewController
子视图控制器(隐藏工具栏的视图控制器)中的

只要我们从子视图控制器将子视图控制器推送到UINavigationController堆栈,就会调用子视图控制器viewWillAppear:方法。这将简单地隐藏UINavigationController工具栏(在推动动画开始之前),暴露位于UINavigationController工具栏下方的UIWindow部分。推送动画的其余部分按预期执行(UINavigationController工具栏在子视图控制器中仍然不可见,所有内容都适当调整大小)。然后,当我们弹出子视图控制器时,将为parentViewController调用viewWillAppear:方法,该方法将取消隐藏UINavigationController工具栏(使工具栏在子视图控制器中可见),然后将执行pop动画。 pop动画的其余部分按预期执行(UINavigationController工具栏仍在父视图控制器中可见,所有内容都已正确调整大小)。

有点想到这个问题会导致一个rathole。我唯一剩下的想法是:

1)编辑#1 (虽然该实施受限于无法适当或合法地改变标准UIToolbar实例的高度,iPod Touch或iPhone处于横向状态;我的一个原因对使用UINavigationController的工具栏感到满意。

2)子类UITabBar或UITabBarController试图阻止setHidesBottomBarWhenPushed:方法意识到UITabBarController标签栏是底栏。基本上,绕过选项卡栏并改为传递UINavigationController工具栏。可能是最有希望的想法,但可能是最困难的(因为setHidesBottomBarWhenPushed的知识:内脏是有限的,因为可能需要私有API)。

2 个答案:

答案 0 :(得分:3)

按下导航栏控制器时 编写像

这样的代码
YourController = [[YourController alloc] initWithNibName:@"YourController" bundle:nil]
controller.hidesBottomBarWhenPushed = TRUE;
[self.navigatoinController pushViewController:controller Animated:YES];

//// Try this code where you want to hide navigation bar

-(void)viewWillAppear{
    self.navigationController.navigationBarHidden = TRUE;
}

答案 1 :(得分:0)

UIViewController方法viewWillAppear中进行以下调用

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

该栏属于UINavigationController。虽然我从未使用过hidesBottomBarWhenPushed,但它看起来似乎可以找到最底层的条形码。