iOS:hidesBottomBarWhenPushed的正確用法

來源:互聯網
上載者:User

標籤:for   ide   aced   bottom   原來   意思   def   ios6   anti   

今天說的是在TabBar嵌套Nav時,進行Push的時候隱藏TabBar的問題。

之前項目也需要這麼做,那時候iOS7還沒出,也是各種搜羅,後來的解決方案是當push操作的時候自己隱藏Tabbar,push過去視圖展開適應螢幕,再pop回來的時候接再顯示Tabbar,過程複雜還需要自己寫動畫,最終效果也不是很理想。

前兩天公司APP上架,當時沒有適配iOS7,在XCode4.6上開發編譯並發布,居然在iOS7下跑起來沒有太大的問題,只是一個Nav的文字錯位,有閃退,不過勉強還能用,其中有自訂Tabbar,有很多動畫,後來在一篇介紹iOS7適配的文章中看到這麼一句話:

在Xcode 4.6上使用iOS 6 SDK進行編譯的app在iOS
7上運行時是採用一種特殊的類比模式,它試圖儲存app原來的樣子。但是一旦你升級到了Xcode 5,在iOS
7SDK上編譯,你的app就會開始出現狀況了。

已經寫的很清楚了,於是我再到Xcode5中編譯運行原來的項目,就破漏百出了,開始完全崩潰,各種問題浮現。

好了,回到今天說的正題,先和大家說說hidesBottomBarWhenPushed,從這個屬性名稱也能知道它的意思了,官方的解釋是這樣:

If YES, then when this view controller is pushed into a controller hierarchy with a bottom bar (like a tab bar), the bottom bar will slide out. Default is NO.

大致意思是如果為YES,當這個控制器push的時候,底部的Bar,比如Tabbar會滑走,也就是不會在push後的視圖上顯示出來,預設值為NO。

我講的情境大概為這個樣子:

 

 

最外面是一個TabBarController,套了兩個NavgationController,當其中一個VC push下去的時候,一般情況是這樣:

 

 

當隱藏Tabbar的時候再push,效果是這樣:

 

 

怎麼樣,是不是有時候確實會遇到這樣的情況?其實蘋果真的考慮的很周全,為我們創造了hidesBottomBarWhenPushed這個屬性,為瞭解決這個問題。代碼非常簡單,一句或者兩句話即可,這裡得分幾種Push的情況。

Case1:xib載入或者Storyboard用identifier擷取Controller

UIViewController *v2 = [self.storyboard instantiateViewControllerWithIdentifier:@"v2"];v2.hidesBottomBarWhenPushed = YES;[self.navigationController pushViewController:v2 animated:YES];

Case2:拉線,也就是Storyboard用performSegue

self.hidesBottomBarWhenPushed = YES;[self performSegueWithIdentifier:@"tov2" sender:nil];self.hidesBottomBarWhenPushed = NO;

Tip:經測試證明,此種方式只會對後面的一級生效,繼續往後Push還會出現TabBar,要繼續往後push也隱藏Tabbar還得使用Case3的方法,也建議如此!

Case3:拉線,在prepareForSegue函數裡

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{    [segue.destinationViewController setHidesBottomBarWhenPushed:YES];}

更方便的做法:如果你在用 Storyboard,可以在 ViewController 的設定面板中把 Hide Bottom Bar on Push 屬性勾選上,效果和上文代碼一樣。

暫時就用到這幾點,我之前的做法,自己手動隱藏,展開view,顯示不但麻煩,相容性也不好,移到iOS7上問題多多,不過用這個屬性可以非常方便的實現此需求,並且在iOS6上也完美相容哦。

注意:還有個問題,這個屬性只支援非自訂的Tabbar,也就是只支援原生Tabbar,如果是自訂的Tabbar會產生你意想不到的效果,我之前就遇到過,因為使用hidesBottomBarWhenPushed後,系統內部會處理TabbarController上Tabbar這個View,我之前自訂的Tabbar做法是吧原生Tabbar這個View隱藏掉,然後添加到自己繪製的Tabbar
View上去,缺點就是這樣你的自訂的TabBarview接收不到系統應有的一些響應,於是我嘗試著把自訂的TabBar
View添加到原來的TabBar View上,也就是不隱藏原生的TabBar,而是覆蓋在上面,看不出任何區別,效果也能達到上面圖片的效果!

iOS:hidesBottomBarWhenPushed的正確用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.