天天看點

如何iOS6和iOS7下隐藏UITabBar

不栽跟頭,你就不會進步!

這兩天适配iOS6,在UITabBar隐藏後原區域不響應點選事件的問題上裹足不前,異常上火(不用心,就會這樣)!

對于iOS7而言,隐藏UITabBar很容易:

self.tabBarController.tabBar.hidden = YES;

然後把self.view的高度加上個tabBar的高度(預設高度49)就ok了,可謂不費吹灰之力!iOS7以下就不行了!

這裡有一段代碼,iOS6及以上系統都可以用,我就直接粘過來了

  1. -(void)makeTabBarHidden:(BOOL)hide {   
  2.      // Custom code to hide TabBar   
  3.      if ( [tabBarController.view.subviews count] < 2 ) {   
  4.           return;   
  5.      }   
  6.      UIView *contentView;     
  7.      if ( [[tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] ) {   
  8.           contentView = [tabBarController.view.subviews objectAtIndex:1];   
  9.      } else {   
  10.           contentView = [tabBarController.view.subviews objectAtIndex:0];   
  11.      }   
  12.      if (hide) {   
  13.           contentView.frame = tabBarController.view.bounds;   
  14.      } else {   
  15.           contentView.frame = CGRectMake(tabBarController.view.bounds.origin.x,                  
  16.                                          tabBarController.view.bounds.origin.y,   
  17.                                          tabBarController.view.bounds.size.width,   
  18.                                          tabBarController.view.bounds.size.height -   
  19.                                          tabBarController.tabBar.frame.size.height);   
  20.      }   
  21.      tabBarController.tabBar.hidden = hide;   
  22. }  

經檢驗,可靠可用,再也不用擔心iOS6下UITabBar隐藏後該區域還死活不能響應點選事件的問題了!

第一眼看到這段代碼時,我是視而不見啊,竟然沒去試試,事後,這也令我異常惱火(我想我應該活該)!

我同僚試了一下,奏效!悔不當初 .多看一眼 .......

我分析一下這個代碼:

在iOS6上,UITabBar位于一個viewController中self.view的上面,你要是用

self.tabBarController.tabBar.hidden = YES;

然後你這樣

 [self.tabBarController setTabBarItem:nil];

 甚至你再這樣

[self.tabBarController.tabBar removeFromSuperView];

最後你會發現,tabBar所占的區域還是不能響應點選事件,在iOS6上它也就占着茅坑不拉了,你真拿它沒招...

是以用上面的代碼吧!

不說啥,我隻是對這種iOS6上tabBar占着茅坑不拉的行為很憤慨!

說點實用的

話說我這邊是寫的是一個繼承自UITabBarController的一個子類,在viewDidLoad方法中我發現,self.view一開始是有兩個subview的,一個就是tabBar,這個貨占着self.view下方49的高度,另一個就是contentView(我姑且這麼稱呼,具體叫啥名估計得問xcode它父親了).iOS7以下系統中當你把tabBar拿掉後,contentView是不會自動把自己的高度延展的,是以就你就得手動去幫它把tabBar的高度加上去。而iOS7及以上的系統,蘋果的開發人員應該幫我們把這活給幹了,是以我們隐藏就行了。

我自己的了解,歡迎指正!

代碼來自 http://blog.csdn.net/yongyinmg/article/details/40050089

繼續閱讀