当触摸屏幕时,如何隐藏特定标签索引和标签的iOS标签栏?

时间:2011-09-30 00:04:05

标签: ios uitabbarcontroller

我试图隐藏特定视图的标签栏,并在触摸屏幕时将其显示回来。我希望它具有与youtube类似的效果,例如,当视频正在播放时,播放器控件被隐藏,屏幕被触摸,控件再次显示。

4 个答案:

答案 0 :(得分:6)

您可以使用此代码显示和隐藏标签栏:

@implementation UITabBarController (Extras)
-(void)showTabBar:(BOOL)show {
  UITabBar* tabBar = self.tabBar;
  if (show != tabBar.hidden)
    return;
  UIView* subview = [self.view.subviews objectAtIndex:0];
  CGRect frame = subview.frame;
  frame.size.height += tabBar.frame.size.height * (show ? -1 : 1);
  subview.frame = frame;
  tabBar.hidden = !show;
}

此代码有效,Apple最近在应用程序中被接受,并且(作为一个类别)我发现比其他解决方案更容易使用。

如果要隐藏tabBar,只需调用:

[self.tabBarController showTabBar:NO];

同样,要再次显示,请使用YES作为参数调用此消息。

注意:不知怎的,我忘记了过去某些时候我已经查过了这段代码,现在我不确定是谁最初回答了这个问题。索拉布answered a similar question。 Saurabh提供的代码遍历查找isKindOfClass:[UITabBar class]的所有视图,而我只抓取第一个子视图 - 面对更新时可能会很脆弱。

答案 1 :(得分:3)

您是否尝试过直接隐藏标签栏? 在视图控制器中,您希望没有标签栏,将tabBar.hidden = YES;添加到viewWillAppear:viewDidAppear:以反转具有内置触摸事件触发器tabBar.hidden = NO;

我没有亲自使用标签栏,但这适用于其他视图,所以这是我首先尝试的方式。

答案 2 :(得分:0)

   Try This Code

- (void) hideTabBar:(UITabBarController *) tabbarcontroller 
 {
CGRect screenRect = [[UIScreen mainScreen] bounds];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
float fHeight = screenRect.size.height;
if(  UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) )
{
    fHeight = screenRect.size.width;
}

for(UIView *view in tabbarcontroller.view.subviews)
{
    if([view isKindOfClass:[UITabBar class]])
    {
        [view setFrame:CGRectMake(view.frame.origin.x, fHeight, view.frame.size.width, view.frame.size.height)];
    } 
    else 
    {
        [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
        view.backgroundColor = [UIColor blackColor];
    }
}
[UIView commitAnimations];
 }



   - (void) showTabBar:(UITabBarController *) tabbarcontroller 
  {   
CGRect screenRect = [[UIScreen mainScreen] bounds];
float fHeight = screenRect.size.height - 49.0;

if(  UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) )
{
    fHeight = screenRect.size.width - 49.0;
}

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
for(UIView *view in tabbarcontroller.view.subviews)
{   
    if([view isKindOfClass:[UITabBar class]])
    {
        [view setFrame:CGRectMake(view.frame.origin.x, fHeight, view.frame.size.width, view.frame.size.height)];            
    } 
    else 
    {
        [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
    }       
}
 [UIView commitAnimations]; 
}

答案 3 :(得分:0)

试试这个:

self.tabBarController.tabbar.hidden = YES;

将它放在viewDidLoad中。