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
选项卡栏应保持可见

我尝试将pushed
UIViewController
的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工具栏。那是