多层界面之间显示与隐藏tabBar

IOS中多层界面之间显示与隐藏tabBar?

在做项目的时候,遇到了一个难题,使用hidesBottomWhenPushed=YES属性设置,可以让本级界面及其以后界面都隐藏,但是根据项目

需求,在第4层是需要显示标签栏的。

于是想了很多的办法,每个要显示的push的界面前都加了hidesBottomWhenPushed=YES,要隐藏的push的界面都加了hidesBottomWhenPushed=NO,

但是一样不好使。

手动调用self.tabbarchontroller.tabbar.hiden =YES,这样写可以隐藏标签栏的项,但是上面有一层白色的空白视图占着,一样没有解决问题。


最后想到了修改标签栏的Frame的方法来解决,果真能行。

我把下面的代码写到了项目中所有视图控制器的父类中:(记得暴露出这两个方法,让子类调用)

 

  1. #pragma mark - 隐藏TabbBar  
  2. - (void)hideTabbar {  
  3.   if (_originY + 49 == fabs(self.tabBarController.tabBar.frame.origin.y)) {  
  4.     return ;  
  5.   }  
  6.   for (UIView *v in [self.tabBarController.view subviews]) {  
  7.     if ([v isKindOfClass:[UITabBar class]]) {  
  8.       [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){  
  9.           
  10.         CGRect frame = v.frame;  
  11.         frame.origin.y += 49.0f;  
  12.           v.frame = frame;  
  13.         NSLog(@"tabBar originY: %f", frame.origin.y);  
  14.       } completion:nil];  
  15.     } else {  
  16.       [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){  
  17.           
  18.         CGRect frame = v.frame;  
  19.         frame.size.height += 49.0f;  
  20.         v.frame = frame;  
  21.           
  22.       } completion:nil];  
  23.     }  
  24.   }  
  25.   return;  
  26. }  
  27.   
  28. #pragma mark - 显示TabBar  
  29. - (void)showTabBar {  
  30.   if (_originY == fabs(self.tabBarController.tabBar.frame.origin.y)) {  
  31.     return ;  
  32.   }  
  33.   for (UIView *v in [self.tabBarController.view subviews]) {  
  34.     if ([v isKindOfClass:[UITabBar class]]) {  
  35.       [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){  
  36.           
  37.         CGRect frame = v.frame;  
  38.         frame.origin.y -= 49.0f;  
  39.           v.frame = frame;  
  40.       } completion:nil];  
  41.     } else {  
  42.       [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){  
  43.         CGRect frame = v.frame;  
  44.         frame.size.height -= 49.0f;  
  45.         v.frame = frame;  
  46.       } completion:nil];  
  47.     }  
  48.   }  
  49.   return;  
  50. }  

=================================================

欢迎学习本文,未经许可,禁止转载!

你可能感兴趣的:(多层界面之间显示与隐藏tabBar)