[英]UITabBarController with UINavigationController, hide UINavigationController toolbar on hidesBottomBarWhenPushed, not UITabBarController tab bar
我有一个带有三个视图控制器的UITabBarController
根视图控制器,其中一个是带有UIViewController
的UINavigationController
,其中包含UISearchDisplayController
和UITableView
。 没有隐藏UINavigationController
工具栏。
但是,当我在UITableView
选择一行时,我想推送另一个UIViewController
。 按下此UIViewController
, UINavigationController
工具栏应滑出, UITabBarController
选项卡栏应保持可见。
我尝试将推送的UIViewController
的hidesBottomBarWhenPushed属性设置为true(当UINavigationController
未嵌套在UITabBarController
时,它提供了预期的行为)。 不幸的是,当将hidesBottomBarWhenPushed设置为true时,将UINavigationController
工具栏滑出,而是将UITabBarController
滑出,使UINavigationController
在被推入的UIViewController
作为底部栏可见。
按下时如何滑出UINavigationController
工具栏,而不是UITabBarController
选项卡栏?
编辑#1 :我能想到的唯一可能的解决方案是,只需将UIToolbar
添加到包含UITableView
的UIViewController
视图的底部,而不是使用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.