【问题标题】:How to hide/show tab bar of a view with a navigation bar in iOS?如何在 iOS 中使用导航栏隐藏/显示视图的标签栏?
【发布时间】:2011-09-17 00:07:40
【问题描述】:

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

我看到了一段隐藏标签栏的sn-p代码:

-(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函数中调用函数时也是如此。

【问题讨论】:

    标签: ios uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    试试这个隐藏/显示:

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

    【讨论】:

      【解决方案2】:

      斯威夫特 3: 设置标签栏隐藏在viewWillAppearviewDidAppear

      self.tabBarController?.tabBar.isHidden = true
      

      【讨论】:

        【解决方案3】:
        self.navigationController.hidesBottomBarWhenPushed=YES;
        

        将此行添加到您的viewDidLoadviewWillAppear;这将从底部隐藏你的标签。

        【讨论】:

          【解决方案4】:

          您可以使用以下代码,但当您返回时,tabBar 仍处于隐藏状态。

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

          更好的方法是通过 main.storyboard 检查"Hide Bottom Bar on Push",就像我做的那样。

          【讨论】:

            【解决方案5】:

            您也可以在故事板的界面生成器中执行此操作。选择要为其隐藏 Tab Bar 的 View Controller,然后选择“Hide Bottom Bar on Push”。

            【讨论】:

            • 答案中最优雅的方式
            【解决方案6】:

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

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

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

            【讨论】:

            • 如果横向模式修复可以自己签入会很棒。也许可以发送一个拉取请求,@boliva?
            【解决方案7】:

            当您在 Xib 或情节提要文件上单击视图控制器时,属性检查器上会显示相同的属性。

            【讨论】:

              【解决方案8】:

              您可以改为设置 UIViewController.hidesBottomBarWhenPushed:

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

              【讨论】:

              • 在无法选择新控制器的情况下,这是一个看起来很酷的解决方案,它应该使条进出动画:stackoverflow.com/questions/5272290/…
              • 太棒了。太感谢了。只是为了让您知道您也可以在 prepareForSegue 中做到这一点。
              • 需要注意的一点是,布景的位置很重要。在答案中显示的位置设置hidesBottomBarWhenPushed 有效,但如果在DetailViewController 的viewDidLoad 方法中设置它则无效。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-05-30
              • 1970-01-01
              相关资源
              最近更新 更多