iOS隐藏tabbar

作者: sovran | 来源:发表于2018-10-09 17:34 被阅读0次

    一般如果要从带tabbar的页面跳转到某个页面,只需要用到hidesBottomBarWhenPushed 就可以了,代码如下

    - (void)next {
        
        UIViewController *n = [UIViewController new];
        n.view.backgroundColor = [UIColor whiteColor];
        n.hidesBottomBarWhenPushed = YES;
        [self.navigationController pushViewController:n animated:YES];
    }
    

    但如果要在包含tabbar的页面中,动态的控制tabbar的隐藏状态可以使用如下代码

    - (void)hideTabbar:(BOOL)hide {
        
        // 内嵌页面 不操作tabbar
        if (![self.parentViewController isKindOfClass:[UINavigationController class]]) {
            return;
        }
        
        // 二级页面 不操作tabbar
        if (![self isEqual:self.navigationController.viewControllers[0]]) {
            return;
        }
        
        self.isTabbarHidden = hide; // isTabbarHidden 用来保存当前tabbar的隐藏状态
        self.tabBarController.tabBar.hidden = hide;
        self.hidesBottomBarWhenPushed = hide; // 设置这个主要是用于tab间切换,切换回来的时候,保持当前页面tabbar状态不变
        
        // 调整view的大小
        UIView *tab = self.tabBarController.view;
        if (hide) {
            self.view.frame = tab.bounds;
            self.hideTabbarBefore = true;
        } else {
            self.view.frame = CGRectMake(tab.bounds.origin.x, tab.bounds.origin.y, tab.bounds.size.width, tab.bounds.size.height - self.tabBarController.tabBar.frame.size.height);
        }
    }
    

    这里有一个问题,操作如下

    1. 隐藏tabbar后,然后push到一个新页面。
    2. 返回第一个页面, 显示tabbar
    3. 然后再push到一个新页面, 这个时候tabbar不会被隐藏。

    我的解决方案, 在willDisappear的时候 判断是否是push,如果是push,又刚刚tabbar被隐藏过,那么就手动隐藏tabbar。

    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        if ([self isEqual:self.navigationController.viewControllers[0]]) {
            // 切tab的时候需要还原tabbar状态为显示
            if (self.controller.navigationController.viewControllers.count == 1) {
                  // 不是present新页面
                  if (!self.controller.presentedViewController) {
                      [self.controller.tabBarController.tabBar setHidden:NO];
                  }
              } else {
                  // 上一次被hidden过了, 这次需要手动隐藏tabbar,否则tabbar不会隐藏,设置了hidesBottomWhenPush也没用
                  if (_hideTabbarBefore) {
                      self.controller.tabBarController.tabBar.hidden = YES;
                      _hideTabbarBefore = NO;
                  }
              }
        }
    }
    

    差不多这样子了。

    相关文章

      网友评论

        本文标题:iOS隐藏tabbar

        本文链接:https://www.haomeiwen.com/subject/zzryaftx.html