2011-04-04 135 views
3

我对iOS的UITabBarController的标签栏有疑问。iOS-如何用动画隐藏/显示UITabBarController的标签栏?

我使用的是UITabBarController来显示一些视图,但我希望视图尽可能以较大的屏幕显示。是否有可能隐藏标签栏,使其通常不显示,直到用户触摸屏幕,然后标签栏将(动画)显示在底部。然后,几秒钟后,如果什么都没有完成,那么标签栏将再次消失,以便视图再次成为全屏幕?

回答

1

不要认为这将适用于Apple的UIGuidelines。您使用的视图被绘制在标签栏的上方,所以如果您将其淡入淡出,则不会出现任何内容。

你可以用按钮代替标签栏做一个小视图,它可以做你想做的事情。

5

这是怎么表现出来

- (void)showTabBar:(UITabBarController *)tabbarcontroller 
{ 
    tabbarcontroller.tabBar.hidden = NO; 
    [UIView animateWithDuration:kAnimationInterval animations:^{ 
     for (UIView *view in tabbarcontroller.view.subviews) { 
      if ([view isKindOfClass:[UITabBar class]]) { 
       [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y-49.f, view.frame.size.width, view.frame.size.height)]; 
      } 
      else { 
       [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height-49.f)]; 
      } 
     } 
    } completion:^(BOOL finished) { 
     //do smth after animation finishes 
    }]; 
} 

...这是你如何把它隐藏

- (void)hideTabBar:(UITabBarController *)tabbarcontroller 
{ 
    [UIView animateWithDuration:kAnimationInterval animations:^{ 
     for (UIView *view in tabbarcontroller.view.subviews) { 
      if ([view isKindOfClass:[UITabBar class]]) { 
       [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y+49.f, view.frame.size.width, view.frame.size.height)]; 
      } 
      else { 
       [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height+49.f)]; 
      } 
     } 
    } completion:^(BOOL finished) { 
     //do smth after animation finishes 
     tabbarcontroller.tabBar.hidden = YES; 
    }]; 
} 
+0

谢谢,这个答案帮了我。 :)我也在完成块中将标签栏'hidden'属性设置为'YES'。这对于确定在视图出现时是否需要显示标签栏非常有用。 – James 2012-10-12 12:40:42

+0

你说得对。我刚刚更新了代码。谢谢。 – 2012-10-12 13:05:04

+0

您的原始代码已经非常有用,但是因为您决定更新它,所以对于'-showTabBar:''hidden'属性应该在动画块(而不是完成块)之前设置为“NO”。否则,效果看起来很奇怪。 – James 2012-10-13 09:53:41

2

随着接受的答案,在iOS 7,当你隐藏标签栏和你再次显示大小是错误的。此代码给出了更好的结果:

- (void) toggleTabBar: (UITabBar *)tabBar view: (UIView*) view { 

    tabBar.hidden = NO; 

    [UIView animateWithDuration:0.5 animations:^{ 
      if (hiddenTabBar) { 
       tabBar.center = CGPointMake(tabBar.center.x, self.view.window.bounds.size.height-tabBar.bounds.size.height/2); 
      } 
      else { 
       tabBar.center = CGPointMake(tabBar.center.x, self.view.window.bounds.size.height+tabBar.bounds.size.height); 
      } 

     } completion:^(BOOL finished) { 
      hiddenTabBar = !hiddenTabBar; 
      tabBar.hidden = hiddenTabBar; 
     }]; 
}