我的故事板如下:
UINavigationController
|
UITabbarController
|
HomeVC - Container
|
PageViewController
|
MainVC | MenVC | WomenVC | ElectronicsVC ...
我尝试使用tabbarcontroller从MainVC推送一个新的视图控制器。我希望底部的标签栏可见,但我不能。每次按下新的viewcontroller时,它都将全屏显示。
在我的NavigationHelper.m中,
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainV3" bundle:nil];
MyNewViewController *myNewVC = [storyboard instantiateViewControllerWithIdentifier:@"MyNewViewController"];
[myTabbarController setHidesBottomBarWhenPushed:NO];
[myTabbarController.navigationController pushViewController:myNewVC animated:YES];
// I have checked myTabbarController and myNewVC instances are not nil.
我在这个设计中使用pageviewcontroller的原因是因为我在tabbarcontroller的第一项中需要很少的视图控制器。
在推送新控制器之前,将tabbarcontroller setHidesBottomBarWhenPushed 属性设置为YES。
我已检查HomeVC内的容器未覆盖标签栏。
答案 0 :(得分:2)
您需要将TabBarController设置为应用程序的根目录,就像在此方案中一样:
TabBarController -> Tab1 -> UINavigationController -> ViewContoller1 -> ViewContoller2.
ant不喜欢:
NavigationController -> TabBarController -> VC1 -> VC2
在这种情况下,您可以在ViewContoller1和ViewContoller2之间导航,TabBarContoller将保持可见。
答案 1 :(得分:1)
这是因为当您在push
上调用myTabbarController.navigationController
时,实际上在与UITabBarController
控制器相同的层次结构级别添加了一个控制器。
UINavigationController
|
UITabBarController –> YourPushedViewController
显然隐藏了整个UITabBarController
及其栏及其包含的所有内容。
如果您希望在特定的标签中进行导航,则应将UINavigationController
放在此标签中,然后push
使用它。
所以你的新层次结构应该是这样的。
UITabBarController
|
FirstTab — SecondTab — ...
|
UINavigationController
|
HomeVC - Container
|
PageViewController
|
MainVC | MenVC | WomenVC | ElectronicsVC ...