19

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

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

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

有谁知道如何做到这一点?

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

  yourTabViewController.hidesBottomBarWhenPushed = YES;

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

    self.tabBarController.tabBar.hidden = YES;
4

6 回答 6

26

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

self.hidesBottomBarWhenPushed = YES;

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

ChildViewController* childVC = [[ChildViewController alloc] init];
childVC.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:childVC animated:YES];
[childVC release];
于 2011-06-28T21:12:05.790 回答
8

我发现的最佳解决方法是更改​​视图大小以使其覆盖标签栏。这是我在选择一行时隐藏 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];
}   
}
于 2009-09-05T15:13:46.720 回答
6

我的解决方案:

// 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>

于 2011-11-11T14:54:12.660 回答
3

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

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

无论如何,您都可以在 IB 中或通过代码执行此操作。

希望对大家有帮助...

于 2011-11-14T22:13:47.093 回答
0

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

于 2010-04-27T23:05:04.983 回答
0

如果有人需要 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);
            }
        });
    }
于 2013-06-11T08:49:29.857 回答