navigationbar的各種問題
第一次在簡書上寫文章,有點小緊張哈,接下來我就把我在做iOS開發工程中遇到的一些關于navigationbar的隱藏、設置透明度等問題跟大家分享一下 很多時候我們可能會遇到下圖所示的情況,在這種情況下我們有兩種方式對其進行解決:(1)設置navigationbar隱藏,(2)設置navigationbar透明。
1、navigationbar的隱藏
?[self.navigationController setNavigationBarHidden: YES];//設置navigationbar隱藏
這么設置是對于當前頁面是沒有問題的,但問題在于如果在該頁面設置了隱藏,在該跳轉到其他頁面時也會自動的隱藏掉navigationbar,這就并不是我們想要的。我們的目的是只在這一個頁面隱藏navigationbar。 解決的辦法是在viewWillDisappear中添加如下代碼。
(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:NO]; } 這樣做的時候你會發現在在跳轉頁面的時候沒有動畫效果了,此時你可以加上一個動畫效果,很簡單,將代碼改成[self.navigationController setNavigationBarHidden:NO animated:YES];即可。
ok,試一下效果
可以看到從下一個頁面返回當前的頁面的時候,會有很明顯的黑塊,這是由于在做返回的時候,navigationbar的隱藏沒有做動畫效果,在
(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; ? [self.navigationController setNavigationBarHidden: YES animated: YES]; } 這時候再試一下
已經沒有那些黑色了
BUT,你以為這樣就完美了嗎?然鵝現實是殘酷的,并非你想象的那么簡單。
對于從下一個頁面跳轉到當前頁面是沒有任何問題,但是如果整個工程是類似第一張圖片這樣的navigationcontroller嵌套在tabbarcontroller的話,從其他的tab點擊“我”跳轉過來,你會發現一個很明顯的navigationbar上方有一個向上滑動的動畫,這樣會導致出現一個黑色的橫條一閃而過。這又怎么辦呢?經過思考,我能確認絕對是[self.navigationController setNavigationBarHidden:NO animated:YES];導致的,也就是這個animated:YES導致的,但是如果設成NO,前面也說了會導致從下個頁面跳轉到本頁面出現黑塊,設成YES又會導致從其他tab頁面跳轉過來會出現黑色長條,,,,死結嗎????????就在我一籌莫展之際,我的師傅出馬了,一句話:將viewWillAppear和viewWillDisappear中隱藏和顯示navigationbar的動畫全部設成animated,也就是
(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; ? [self.navigationController setNavigationBarHidden: YES animated: animated]; } OK,大功告成!!!!
BUT!!,師傅說了,其實要實現這樣的功能,還有別的方法,譬如說。。。我特么給忘了,有點小尷尬,后邊有時間在研究研究。
2、navigationbar設為透明或者半透明。
?直接上代碼
(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [self.navigationController.navigationBar setShadowImage:[UIImage new]]; }
(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; [self.navigationController.navigationBar setShadowImage:nil]; }
效果
可以看到導航欄從不透明慢慢變為透明的一個過程。這樣的效果其實很難看,具體怎么解決我在后面再繼續研究一下,當然還有有個最笨的法子,自定義navigationbar,就是不用navigationcontroller,自己寫一個類似的看著一模一樣的導航欄。這個就具體問題具體分析啦。