繁体   English   中英

具有UINavigationController的UITabBarController,在hidesBottomBarWhenPushed而不是UITabBarController选项卡栏上隐藏UINavigationController工具栏

[英]UITabBarController with UINavigationController, hide UINavigationController toolbar on hidesBottomBarWhenPushed, not UITabBarController tab bar

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

但是,当我在UITableView选择一行时,我想推送另一个UIViewController 按下此UIViewControllerUINavigationController工具栏应滑出, UITabBarController选项卡栏应保持可见。

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

按下时如何滑出UINavigationController工具栏,而不是UITabBarController选项卡栏?

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

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

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

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

编辑#4 :首先,谢谢你的时间。 其次,不幸的是,UINavigationController中的setToolbarHidden:animated:方法无法生成动画中的滑出/滑出,如用setHidesBottomBarWhenPushed:看到的那样(有关所需动画,请参阅EDIT#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];
}

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

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

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

1) 编辑#1 (尽管该实现受限于无法适当或合法地改变标准UIToolbar实例的高度,iPod Touch或iPhone处于横向状态;这是我对使用UINavigationController工具栏的原因之一。)

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

当你按下导航栏控制器时写下代码

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;
}

在你的UIViewController方法中, viewWillAppear进行以下调用

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

该栏属于UINavigationController。 虽然我从来没有使用过hidesBottomBarWhenPushed它看起来像是它可以找到的最底部的酒吧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM