对于不耐烦的人:
我希望有一个导航控制器,其根视图控制器是一个tabbarcontroller,类似于iPad应用程序。我正在使用IOS 5和故事板。
倾向于阅读:
在我的故事板中,我在UITabBarController中有6个选项卡,它嵌入在UINavigationController中,在显示3个选项卡后给它一个“更多”按钮。
这样做会在按下更多内容时给出两个导航栏:
所以我是TabBarController的子类:
//@implentation MyTabController
- (void)viewDidLoad
{
self.moreNavigationController.wantsFullScreenLayout = NO;
self.delegate = self;
}
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
// hide nav bar if current controller is "More" controller
self.navigationController.navigationBarHidden =
viewController == self.moreNavigationController;
}
太好了,这给了我:
我的猜测是我需要重新布局视图以考虑状态栏,所以我尝试
[self.view setNeedsLayout:YES];
但我得到一个错误,说UIView不包含setNeedsLayout的选择器所以... 如何获取moreNavigationController.navigationBar来考虑状态栏?
更新:
我有第二个相关问题。当我点击“编辑”按钮时,编辑控制器以模态显示。它的导航栏在保险控制器下面显示(在动画之后),并且不会接收到触摸。
答案 0 :(得分:1)
建议不要将tabBarController推送到NavController,而是为每个tabBar View控制器设置NavigatorController,并将TabBarController设置为主窗口根视图控制器。
如果您希望能够在显示标签栏之前显示屏幕,解决方案是将所有导航控制器推入前一个视图控制器,然后输入您想要显示的控制器(这样所有导航栏都有后退按钮) 。 然后将。hidesBottomBarWhenPushed = YES
设置为第一个视图控制器,这样就不会显示tabBar
示例代码:
UIViewController *prevc = [[UIViewController alloc] init];
//prevc.hidesBottomBarWhenPushed = YES;
//Do this for every VC that will be a tabBarItem
UIViewController *vc1 = [[UIViewController alloc] init];
UINavigationController *nv1 = [[UINavigationController alloc] initWithRootViewController:prevc];
[nv1 pushViewController:vc1 animated:NO];
//Remember to set the tabBarItem!
UITabBarController *tb = [[UITabBarController alloc] init];
tb.viewControllers = [NSArray arrayWithObjects:nv1, nv2, nv3, nil];
我刚刚意识到将hidesBottomBarWhenPushed设置为上一个ViewController将无法正常工作,但如果先显示prevc,然后按下以下的viewController,则不会有问题。但是如果你不想在弹出时隐藏标签栏,请检查:
答案 1 :(得分:0)
我也遇到过类似的问题。在我的应用程序中,导航控制器中还有一个Tabarcontroller。当我尝试以编程方式切换到更多导航控制器中的视图控制器时(例如:[self.tabBarController setSelectedIndex:X];)我的应用程序中出现相同的问题。但是下面的代码解决了我的问题。
self.tabBarController.moreNavigationController.navigationBarHidden = YES;