【问题标题】:Is it possible to hide the tabbar when a button is pressed to allow a full screen view of the content?当按下按钮以允许全屏查看内容时,是否可以隐藏标签栏?
【发布时间】:2010-11-15 15:01:16
【问题描述】:

我在基于导航的应用程序的详细视图中有一个 UITabBar。我将文本和图像存储在表格视图中,并希望用户能够点击单元格以隐藏导航控制器和选项卡栏以全屏查看内容。

我找到了隐藏顶部栏的代码,但隐藏标签栏似乎并不容易。

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
 [self.navigationController setNavigationBarHidden:YES animated:YES];

有人知道怎么做吗?

一旦视图已加载,此代码将无法隐藏 tabBar。

  yourTabViewController.hidesBottomBarWhenPushed = YES;

这是我找到的代码。似乎仅在加载视图时才有效,因此一旦标签栏已经出现,它就不能用于隐藏标签栏。我仍在努力完成这项工作。请帮忙!!!

    self.tabBarController.tabBar.hidden = YES;

【问题讨论】:

    标签: iphone uitableview uitabbarcontroller tabbar


    【解决方案1】:

    有一种内置方法可以做到这一点:

    self.hidesBottomBarWhenPushed = YES;

    但您必须在推送视图之前执行此操作。这就是您可能希望使用的方式:

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

    【讨论】:

    • 或者只是在控制器的init方法中设置self.hidesBottomBarWhenPushed = YES
    • 如果我想用栈顶的根 viewController 来做这件事呢?
    【解决方案2】:

    我发现的最佳解决方法是更改​​视图大小,使其覆盖标签栏。这是我在选择一行时隐藏 statusBar、navBar 和 tabBar 的代码:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    
    if (appDelegate.navigationController.navigationBar.hidden == NO)
    {
        [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
        [appDelegate.navigationController setNavigationBarHidden:YES animated:YES];
    
        [UIView beginAnimations:@"HideTabbar" context:nil];
        [UIView setAnimationDuration:.2];
        self.view.frame = CGRectMake(0,0,320,480);
        [UIView commitAnimations];
    }
    if (appDelegate.navigationController.navigationBar.hidden == YES)
    {
        [[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
        [appDelegate.navigationController setNavigationBarHidden:NO animated:YES];
    
        [UIView beginAnimations:@"ShowTabbar" context:nil];
        [UIView setAnimationDuration:.2];
        self.view.frame = CGRectMake(0,0,320,368);
        [UIView commitAnimations];
    }   
    }
    

    【讨论】:

      【解决方案3】:

      我的解决方案:

      // Hide tab bar animated
      CATransition *animation = [CATransition animation];
      [animation setType:kCATransitionFade];
      [[self.view.window layer] addAnimation:animation forKey:@"layerAnimation"]; 
      [self.tabBarController.tabBar setHidden:YES];
      
      // Display tab bar animated
      CATransition *animation = [CATransition animation];
      [animation setType:kCATransitionFade];
      [[self.view.window layer] addAnimation:animation forKey:@"layerAnimation"]; 
      [self.tabBarController.tabBar setHidden:NO];
      

      你必须添加#import <QuartzCore/QuartzCore.h>

      【讨论】:

      • 这很棒!您可以在情节提要或界面构建器右侧面板中为您正在修改的控制器设置“无底栏”,以便更准确地了解隐藏标签栏后界面元素的最终位置
      • 这隐藏了标签栏,但留下了丑陋的黑色空间
      【解决方案4】:

      我找到了这个问题的一个答案,非常简单有效。

      解决方案是在应用的所有视图、视图控制器和标签栏控制器中设置“在推送时隐藏底部栏”选项。

      您可以在 IB 中执行此操作,也可以通过代码执行此操作。

      希望对大家有所帮助...

      【讨论】:

        【解决方案5】:

        为了调整窗口的大小,您首先需要在 Inspector 窗口的“属性”选项卡下的状态栏字段中选择“无”选项。然后,Interface Builder 将允许您更改窗口的大小。

        【讨论】:

          【解决方案6】:

          如果有人需要 MonoTouch 版本的操作系统,这个很酷的小技巧。 (谢谢!)

              // Method implementations
              static void hideTabBar (UITabBarController tabbarcontroller)
              {
                  UIView.Animate(0.4, delegate() { 
                      foreach(UIView view in tabbarcontroller.View.Subviews)
                      {
                          if(view.GetType()==typeof(UITabBar))
                              view.Frame=new  RectangleF(view.Frame.X, 480, view.Frame.Size.Width, view.Frame.Size.Height);
                          else 
                              view.Frame=new  RectangleF(view.Frame.X, view.Frame.Y, view.Frame.Size.Width, 480);
                      }
                  });
              }
          
              static void showTabBar (UITabBarController tabbarcontroller)
              {
                  UIView.Animate(0.4, delegate() { 
                      foreach(UIView view in tabbarcontroller.View.Subviews)
                      {
                          if(view.GetType()==typeof(UITabBar))
                              view.Frame=new  RectangleF(view.Frame.X, 367, view.Frame.Size.Width, view.Frame.Size.Height);
                          else 
                              view.Frame=new  RectangleF(view.Frame.X, view.Frame.Y, view.Frame.Size.Width, 367);
                      }
                  });
              }
          

          【讨论】:

            猜你喜欢
            • 2016-09-02
            • 1970-01-01
            • 2012-03-28
            • 1970-01-01
            • 1970-01-01
            • 2014-04-24
            • 2014-07-02
            • 2023-01-11
            • 1970-01-01
            相关资源
            最近更新 更多