粘貼這哥們的內容之前我想說下:
這個問題之前真的沒怎么在乎,以為是導航欄自己系統(tǒng)自帶的砌函, 但是真的自己看了之后才發(fā)現斩披,set方法與. 方法的不同,老鐵們以后注意了讹俊。
在項目中遇到一種情景垦沉,在導航控制器中有個界面A導航條需要隱藏而A的下一級界面B則需要顯示導航條。我剛開始的解決方案是在A的viewWillAppear方法中設置self.navigationController.navigationBar.hidden = YES;而在B的viewWillAppear方法中設置self.navigationController.navigationBar.hidden = NO仍劈。本來以為沒什么問題厕倍,結果無意中發(fā)現在B界面使用iOS7以上系統(tǒng)的手勢滑動返回A時,B界面剛有一點偏移A的viewWillAppear方法就已經調用了導致A界面尚未完全顯示到窗口導航條就已經消失了贩疙,如圖
這是因為導航條是屬于導航控制器的而并不是導航控制器的每個子VC都有一個屬于自己的導航條讹弯。
而我實際想要的效果卻是在手勢滑動返回A界面途中導航條隨著B界面一起偏移,如圖
后來終于找到了解決方案这溅,那就是在A的viewWillAppear方法中不要使用self.navigationController.navigationBar.hidden = YES;這個方法而應該使用[self.navigationControllersetNavigationBarHidden:YESanimated:YES]這個方法组民,相應的在B的viewWillAppear方法中也不要使用self.navigationController.navigationBar.hidden = NO這個方法而應該使用[self.navigationControllersetNavigationBarHidden:NOanimated:YES]這個方法。注意:animated這個參數一定要設置為YES悲靴,因為使用[self.navigationController?setNavigationBarHidden:YES?animated:YES]之所以能達到上圖這種我們想要的效果就是因為有這個動畫臭胜,而這個動畫效果就是導航條隨著導航控制器的子VC的界面一起偏移。當然也可以把animated這個參數設置為和
-(void)viewWillAppear:(BOOL)animated的animated參數一致([self.navigationController?setNavigationBarHidden:YES?animated:animated]癞尚、[self.navigationController?setNavigationBarHidden:NO?animated:animated])耸三,因為當界面是動畫顯示出來(如push、pop)的時候-(void)viewWillAppear:(BOOL)animated的animated參數本來就會是YES浇揩,而當界面不是動畫顯示出來的時候-(void)viewWillAppear:(BOOL)animated的animated參數會是NO而這個時候我們也不需要動畫的隱藏導航條仪壮。
當然也可以不用在B的viewWillAppear方法中而在A的- (void)viewWillDisappear:(BOOL)animated中調用[self.navigationController?setNavigationBarHidden:NO?animated:YES]方法
轉自:http://blog.csdn.net/yz_lby/article/details/49082131