如何iOS6和iOS7下隱藏UITabBar

來源:互聯網
上載者:User

如何iOS6和iOS7下隱藏UITabBar

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

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

對於iOS7而言,隱藏UITabBar很容易:

self.tabBarController.tabBar.hidden = YES;

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

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

 

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

     

    經檢驗,可靠可用,再也不用擔心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及以上的系統,蘋果的開發人員應該幫我們把這活給幹了,所以我們隱藏就行了。

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


     

     

     

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.