隱藏TabBar的一些方法小結(適用與各類狀況)

  1. 在項目中常常遇到隱藏tabBar,實力不少種方法,能夠解決不一樣狀況下問題  
  2.   
  3. 使用中涉及到view的層次關係,下面的使用方法 一、2不作說明;在使用三、4方法時注意要在tabBar所在的rootView中調用實現(必要時使用委託,已達到所須要的目的)  
  4. 舉例:A(rootView 是tabBarCtroller);B(A的subView);C(B經過pushViewController)  
  5. 若是想要C出現的時候將tabView隱藏(且C是全屏的,能展開到tabbar存在的位置),B顯示的時候babView在顯示出來  
  6. 此狀況明顯一、2方法不能實現了,要用三、4的方法來實現;  
  7. 實現方式:B在pushViewController的時候調用其委託函數(即B消失C出現時tabbar隱藏)  
  8. if([delegaterespondsToSelector:@selector(hidenTabbar:)])  
  9. {  
  10.     [delegatehidenTabbar:YES];  
  11. }  
  12. 在A中實現B的委託代碼就是三、4;  
  13. 一樣在B的viewWillAppear中也調用其委託:NO;(B顯示時tabbar出現)  
  14. -(void)viewWillAppear:(BOOL)animated  
  15. {  
  16.     if([delegate respondsToSelector:@selector(hidenTabbar:)])  
  17.     {  
  18.         [delegatehidenTabbar:NO];  
  19.     }  
  20. }  
  21.   
  22. 1://隱藏tabBar  
  23. WebViewController *webVc = [[WebViewController alloc] init];  
  24. webVc.hidesBottomBarWhenPushed = YES;  
  25. [self.navigationController pushViewController:webVc animated:YES];  
  26. webVc.hidesBottomBarWhenPushed = NO;  
  27. [webVc release];  
  28.   
  29. 2.系統方法    self.hidesBottomBarWhenPushed = YES;  
  30.   
  31.   
  32. 3:自定義tabBar時候,由tabBarController管理的  
  33. //隱藏tabBar  
  34. - (void) hideTabBar:(BOOL) hidden{  
  35.       
  36.     [UIView beginAnimations:nil context:NULL];  
  37.     [UIView setAnimationDuration:0];  
  38.       
  39.     for(UIView *view in self.tabBarController.view.subviews)  
  40.     {  
  41.         if([view isKindOfClass:[UITabBar class]])  
  42.         {  
  43.             if (hidden) {  
  44.                 [view setFrame:CGRectMake(view.frame.origin.x, iphone5?568:480, view.frame.size.width, view.frame.size.height)];  
  45.             } else {  
  46.                 [view setFrame:CGRectMake(view.frame.origin.x, iphone5?568-49:480-49, view.frame.size.width, view.frame.size.height)];  
  47.             }  
  48.         }  
  49.         else  
  50.         {  
  51.             if (hidden) {  
  52.                 [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, iphone5?568:480)];  
  53.             } else {  
  54.                 [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width,  iphone5?568-49:480-49)];  
  55.             }  
  56.         }  
  57.     }  
  58.       
  59.     [UIView commitAnimations];  
  60. }  
  61.   
  62. //調整子視圖  
  63. for (UIView *subView in self.view.subviews) {  
  64.     if ([subView isKindOfClass:NSClassFromString(@"UITransitionView")]) {  
  65.         //調整子視圖的高度,UITransitionView視圖爲UINavitaionController的根視圖  
  66.         //            subView.frame = CGRectMake(subView.frame.origin.x, subView.frame.origin.y, subView.frame.size.width, 480);  
  67.           
  68.         CGRect frame = subView.frame;  
  69.         frame.size.height = 480;  
  70.         subView.frame = frame;  
  71.     }  
  72. }  
  73.   
  74. 4:相似方法3  
  75. - (void)makeTabBarHidden:(BOOL)hide  
  76. {  
  77.     if ( [self.tabBarController.view.subviews count] < 2 )  
  78.     {  
  79.         return;  
  80.     }  
  81.     UIView *contentView;  
  82.       
  83.     if ( [[self.tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] )  
  84.     {  
  85.         contentView = [self.tabBarController.view.subviews objectAtIndex:1];  
  86.     }  
  87.     else  
  88.     {  
  89.         contentView = [self.tabBarController.view.subviews objectAtIndex:0];  
  90.     }  
  91.     //    [UIView beginAnimations:@"TabbarHide" context:nil];  
  92.     if ( hide )  
  93.     {  
  94.         contentView.frame = self.tabBarController.view.bounds;  
  95.     }  
  96.     else  
  97.     {  
  98.         contentView.frame = CGRectMake(self.tabBarController.view.bounds.origin.x,  
  99.                                        self.tabBarController.view.bounds.origin.y,  
  100.                                        self.tabBarController.view.bounds.size.width,  
  101.                                        self.tabBarController.view.bounds.size.height - self.tabBarController.tabBar.frame.size.height);  
  102.     }  
  103.       
  104.     self.tabBarController.tabBar.hidden = hide;  
  105. }  
相關文章
相關標籤/搜索