Ios 带UINavigationController的UITabBarController,按下时隐藏隐藏底部工具栏上的UINavigationController工具栏,而不是UITabBarController选项卡栏
我有一个Ios 带UINavigationController的UITabBarController,按下时隐藏隐藏底部工具栏上的UINavigationController工具栏,而不是UITabBarController选项卡栏,ios,uinavigationcontroller,uitabbarcontroller,Ios,Uinavigationcontroller,Uitabbarcontroller,我有一个uitabarcontroller根视图控制器,它有三个视图控制器,其中一个是UINavigationController,它有一个UIViewController,其中包含一个UISearchDisplayController和一个UITableView。UINavigationController工具栏未隐藏 但是,当我在UITableView中选择一行时,我想按下另一个UIViewController。按下此UIViewController时,应滑出UINavigationCont
uitabarcontroller
根视图控制器,它有三个视图控制器,其中一个是UINavigationController
,它有一个UIViewController
,其中包含一个UISearchDisplayController
和一个UITableView
。UINavigationController
工具栏未隐藏
但是,当我在UITableView
中选择一行时,我想按下另一个UIViewController
。按下此UIViewController
时,应滑出UINavigationController
工具栏,并且UIAbbarController
选项卡栏应保持可见
我尝试将pushedUIViewController
的hidesBottomBarWhenPushed属性设置为true(当UINavigationController
未嵌套在UIAbbarController
中时,它提供了预期的行为)。不幸的是,当hidesBottomBarWhenPushed设置为true时,将UINavigationController
工具栏滑出,UIDABBARCONTROLLER
滑出,将UINavigationController
作为底部栏显示在按下的UIViewController
中
按下时如何滑出UINavigationController
工具栏,而不是UITabBarController
选项卡栏
编辑#1:
我能想到的唯一可能的解决方案是,不使用UINavigationController
工具栏,只需在包含UITableView
的UIViewController
视图的底部添加一个UIToolbar
。这将确保推送新的UIViewController
时,UIToolbar
滑出,弹出新的UIViewController
时滑入。唯一的问题是,对于iPhone和iPod Touch而言,与UINavigationController
工具栏不同的是,UIToolbar
实例(44像素)的高度在设备横向旋转时不会缩小到30多像素(就像UINavigationController
工具栏那样)。如果这是唯一合法的解决方案,如何更改UIToolbar
的高度以匹配横向中UINavigationController
工具栏的高度
编辑#2:
关于编辑#1,我想可以在willrotatetointerfaceooritation
方法中更改UIToolbar
的框架。不过,我仍然希望找到一个解决方案来滑出UINavigationController
工具栏。比为每个UIViewController
创建一个单独的UIToolbar
要好,我希望有一个底部工具栏
编辑#3:
基本上,这里是我所拥有的(这是按下HidesBottomBar的结果):
以下是我想要实现的目标:
编辑#4:
首先,谢谢你抽出时间。其次,不幸的是,UINavigationController中的setToolbarHidden:animated:方法在按下setHidesBottomBar时无法生成滑出/滑入动画:(有关所需动画,请参阅编辑#3中的链接,特别是第二个链接)。例如,假设我们写:
- (void)viewWillAppear:(BOOL)animated
{
[self.navigationController setToolbarHidden:NO animated:NO];
[super viewWillAppear:animated];
}
- (void)viewWillAppear:(BOOL)animated
{
[self.navigationController setToolbarHidden:YES animated:NO];
[super viewWillAppear:animated];
}
在父视图控制器(工具栏未隐藏在其中的视图控制器)中,假设我们写入:
- (void)viewWillAppear:(BOOL)animated
{
[self.navigationController setToolbarHidden:NO animated:NO];
[super viewWillAppear:animated];
}
- (void)viewWillAppear:(BOOL)animated
{
[self.navigationController setToolbarHidden:YES animated:NO];
[super viewWillAppear:animated];
}
在子视图控制器(隐藏工具栏的视图控制器)中
一旦我们将子视图控制器从父视图控制器推送到UINavigationController堆栈上,子视图控制器view将出现:方法将被调用。这将简单地隐藏UINavigationController工具栏(在推送动画开始之前),暴露UINavigationController工具栏下面的UIWindow部分。推送动画的其余部分按预期执行(UINavigationController工具栏在子视图控制器中仍然不可见,所有内容都已适当调整大小)。然后,当我们弹出子视图控制器时,将为parentViewController调用ViewWillDisplay:方法,该方法将取消隐藏UINavigationController工具栏(使工具栏在子视图控制器中可见),然后将执行弹出动画。pop动画的其余部分按预期执行(UINavigationController工具栏在父视图控制器中仍然可见,所有内容都已适当调整大小)
我有点觉得这个问题会引来麻烦。我唯一剩下的想法是:
1) 编辑#1(尽管由于无法适当或合法地改变标准UIToolbar实例的高度,iPod Touch或iPhone处于横向;这也是我执意使用UINavigationController工具栏的原因之一)
2) 子类UITabBar或UITabBarController试图阻止setHidesBottomBarWhenPushed:方法意识到UITabBarController选项卡栏是底部栏。基本上,绕过选项卡栏并传递UINavigationController工具栏。这可能是最有希望的想法,但可能是最困难的(因为使用sethidesbottombarwhenpush:innurds时对sethidesbottombars的了解是有限的,而且可能需要私有API)。在您的
UIViewController
方法视图中,将出现以下调用
[self.navigationController setToolbarHidden:YES animated:NO];
该条属于UINavigationController。虽然我从来没有在按下时使用过隐藏底部栏,但它看起来像是在寻找它能找到的最底部栏。当你按下导航栏控制器时
像这样编写代码
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;
}
谢谢你,文斯伯恩。我忘了提了,我也试过这个。显然,这允许您隐藏和取消隐藏UINavigationController工具栏。那是