我有一个UITabBarController
根视图控制器,其中包含三个视图控制器,其中一个是UINavigationController
,UIViewController
包含UISearchDisplayController
和UITableView
。 {隐藏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)。
答案 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
,但它看起来似乎可以找到最底层的条形码。