如何在我的自定义导航控制器中隐藏标签栏?
How to hide tab bar in my custom navigation controller?
我想在将新视图控制器推入 UINavigationController
时隐藏底部标签栏(我使用的是默认标签栏)。我通过继承 UINavigationController
并创建我的自定义导航控制器来做到这一点。
我重写了以下两个函数:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
self.tabBarController.tabBar.hidden = YES;
[super pushViewController:viewController animated:YES];
}
- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
NSLog(@"NavigationController: View controller count = %lu", self.viewControllers.count);
if (self.viewControllers.count <= 2) {
self.tabBarController.tabBar.hidden = NO;
}
return [super popViewControllerAnimated:animated];
}
在应用委托中:
// Use my custom navigation controller
NavigationController *myNav1 = [[NavigationController alloc] initWithRootViewController:myView];
myNav1.navigationBar.translucent = NO;
myNav1.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"abc" image:[UIImage imageNamed:@"abc"] selectedImage:[UIImage imageNamed:@"abc"]];
...
self.tabController.viewControllers = [NSArray arrayWithObjects:myNav1, myNav2, myNav3, myNav4, nil];
问题:
- 推送新视图控制器时,底部栏会立即隐藏,我希望它看起来像被视图控制器推送。
- 当我尝试return以前的视图控制器使用手势时,底栏会显示,即使我停止returning,它也不会隐藏。
我知道一个标志hidesBottomBarWhenPushed
。如果我使用该标志,则每次需要推送视图控制器时都需要将其设置为 YES
。这有点复杂。
有没有办法解决我的自定义导航控制器中的这些问题?
似乎解决了我的问题(代码不是很好,稍后会做一些更新):
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
NSLog(@"NavigationController.pushViewController: view controller count %lu", self.viewControllers.count);
UIViewController *lastVC = nil;
if (self.viewControllers.count > 0) {
lastVC = self.viewControllers[self.viewControllers.count - 1];
}
if (lastVC != nil) {
lastVC.hidesBottomBarWhenPushed = YES;
}
[super pushViewController:viewController animated:YES];
if (self.viewControllers.count == 2) {
lastVC.hidesBottomBarWhenPushed = NO;
}
}
我想在将新视图控制器推入 UINavigationController
时隐藏底部标签栏(我使用的是默认标签栏)。我通过继承 UINavigationController
并创建我的自定义导航控制器来做到这一点。
我重写了以下两个函数:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
self.tabBarController.tabBar.hidden = YES;
[super pushViewController:viewController animated:YES];
}
- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
NSLog(@"NavigationController: View controller count = %lu", self.viewControllers.count);
if (self.viewControllers.count <= 2) {
self.tabBarController.tabBar.hidden = NO;
}
return [super popViewControllerAnimated:animated];
}
在应用委托中:
// Use my custom navigation controller
NavigationController *myNav1 = [[NavigationController alloc] initWithRootViewController:myView];
myNav1.navigationBar.translucent = NO;
myNav1.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"abc" image:[UIImage imageNamed:@"abc"] selectedImage:[UIImage imageNamed:@"abc"]];
...
self.tabController.viewControllers = [NSArray arrayWithObjects:myNav1, myNav2, myNav3, myNav4, nil];
问题:
- 推送新视图控制器时,底部栏会立即隐藏,我希望它看起来像被视图控制器推送。
- 当我尝试return以前的视图控制器使用手势时,底栏会显示,即使我停止returning,它也不会隐藏。
我知道一个标志hidesBottomBarWhenPushed
。如果我使用该标志,则每次需要推送视图控制器时都需要将其设置为 YES
。这有点复杂。
有没有办法解决我的自定义导航控制器中的这些问题?
似乎解决了我的问题(代码不是很好,稍后会做一些更新):
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
NSLog(@"NavigationController.pushViewController: view controller count %lu", self.viewControllers.count);
UIViewController *lastVC = nil;
if (self.viewControllers.count > 0) {
lastVC = self.viewControllers[self.viewControllers.count - 1];
}
if (lastVC != nil) {
lastVC.hidesBottomBarWhenPushed = YES;
}
[super pushViewController:viewController animated:YES];
if (self.viewControllers.count == 2) {
lastVC.hidesBottomBarWhenPushed = NO;
}
}