首页 文章

如何在iOS中使用导航栏隐藏/显示视图的标签栏?

提问于
浏览
58

我有导航栏和标签栏的视图 . 我想要发生的是隐藏某个视图上的标签栏,并在用户更改视图时再次显示标签栏 .

我看到一段用于隐藏标签栏的代码:

-(void)makeTabBarHidden:(BOOL)hide
{
    // Custom code to hide TabBar
    if ( [tabBarController.view.subviews count] < 2 ) {
        return;
    }

    UIView *contentView;

    if ( [[tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] ) {
        contentView = [tabBarController.view.subviews objectAtIndex:1];
    } else {
        contentView = [tabBarController.view.subviews objectAtIndex:0];
    }

    if (hide) {
        contentView.frame = tabBarController.view.bounds;       
    }
    else {
        contentView.frame = CGRectMake(tabBarController.view.bounds.origin.x,
             tabBarController.view.bounds.origin.y,
             tabBarController.view.bounds.size.width,
             tabBarController.view.bounds.size.height - tabBarController.tabBar.frame.size.height);
    }

    tabBarController.tabBar.hidden = hide;
}

来自:http://nickwaynik.com/iphone/hide-tabbar-in-an-ios-app/

我在视图中调用它,我希望隐藏标签栏

[self makeTabBarHidden:YES];

当我在该视图上显示/隐藏它时,它工作正常但当我导航回到上一个视图时,那里的标签栏也是隐藏的 . 我尝试在视图的 viewDidUnloadviewWillDisappearviewDidDisappear 函数中调用该函数,但没有任何反应 . 在上一个视图的 viewDidLoadviewWillAppearviewDidAppear 函数中调用该函数时也是如此 .

8 回答

  • 13

    您可以设置UIViewController.hidesBottomBarWhenPushed:

    DetailViewController *detailViewController = [[DetailViewController alloc] init];
    detailViewController.hidesBottomBarWhenPushed = YES;
    [[self navigationController] pushViewController:detailViewController animated:YES];    
    [detailViewController release];
    
  • 2

    您也可以在Interface Builder中为故事板执行此操作 . 选择要隐藏选项卡栏的视图控制器,然后选择“在推送时隐藏底栏” .

    enter image description here

  • 1

    我刚刚在UITabBarController上创建了一个类别,允许你隐藏TabBar,可选择带动画:

    https://github.com/idevsoftware/Cocoa-Touch-Additions/tree/master/UITabBarController_setHidden

    它添加了 tabBarHidden 属性( isTabBarHidden 作为其getter)和 - (void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated 方法 .

  • 35
    self.navigationController.hidesBottomBarWhenPushed=YES;
    

    将此行添加到 viewdidloadviewWillAppear 这将从底部隐藏您的标签 .

  • 1

    Swift 3:在viewwillAppear或viewdidappear中设置标签栏隐藏

    self.tabBarController?.tabBar.isHidden = true
    
  • 0

    尝试这个隐藏/显示;

    -(void)viewWillDisappear:(BOOL)animated{
        self.hidesBottomBarWhenPushed = NO;
    }
    -(void)viewWillAppear:(BOOL)animated{
        self.hidesBottomBarWhenPushed = YES;
    }
    
  • 144

    单击Xib或storyboard文件上的视图控制器时,属性检查器上可以使用相同的属性 .

  • 0

    您可以使用以下代码,但导航回来时 tabBar 仍然隐藏 .

    //hide tabbar
        //self.tabBarController?.tabBar.isHidden = true
    

    better way 是通过main.storyboard检查 "Hide Bottom Bar on Push" ,就像我做的那样 .

    enter image description here

相关问题