iOS - 无法在显示 TabbarController 的情况下推送视图控制器
iOS - Cannot Push View Controller with TabbarController Showing
我的故事板如下:
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 里面的容器没有覆盖标签栏。
发生这种情况是因为当您在 myTabbarController.navigationController
上调用 push
时,您实际上在与 UITabBarController
控制器相同的层级上添加了一个控制器。
UINavigationController
|
UITabBarController –> YourPushedViewController
这显然隐藏了整个 UITabBarController
及其栏及其包含的所有内容。
如果您想在特定的 选项卡中导航 — 您应该将 UINavigationController
放在该选项卡中,然后 push
使用它。
所以你的新层次结构应该是这样的。
UITabBarController
|
FirstTab — SecondTab — ...
|
UINavigationController
|
HomeVC - Container
|
PageViewController
|
MainVC | MenVC | WomenVC | ElectronicsVC ...
您需要将 TabBarController 设置为应用程序的根目录,就像在这个方案中一样:
TabBarController -> Tab1 -> UINavigationController -> ViewContoller1 -> ViewContoller2.
蚂蚁不喜欢:
NavigationController -> TabBarController -> VC1 -> VC2
在这种情况下,您可以在 ViewContoller1 和 ViewContoller2 之间导航,TabBarContoller 将保持可见。
我的故事板如下:
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 里面的容器没有覆盖标签栏。
发生这种情况是因为当您在 myTabbarController.navigationController
上调用 push
时,您实际上在与 UITabBarController
控制器相同的层级上添加了一个控制器。
UINavigationController
|
UITabBarController –> YourPushedViewController
这显然隐藏了整个 UITabBarController
及其栏及其包含的所有内容。
如果您想在特定的 选项卡中导航 — 您应该将 UINavigationController
放在该选项卡中,然后 push
使用它。
所以你的新层次结构应该是这样的。
UITabBarController
|
FirstTab — SecondTab — ...
|
UINavigationController
|
HomeVC - Container
|
PageViewController
|
MainVC | MenVC | WomenVC | ElectronicsVC ...
您需要将 TabBarController 设置为应用程序的根目录,就像在这个方案中一样:
TabBarController -> Tab1 -> UINavigationController -> ViewContoller1 -> ViewContoller2.
蚂蚁不喜欢:
NavigationController -> TabBarController -> VC1 -> VC2
在这种情况下,您可以在 ViewContoller1 和 ViewContoller2 之间导航,TabBarContoller 将保持可见。