navigationbar的各種問(wèn)題
第一次在簡(jiǎn)書(shū)上寫(xiě)文章,有點(diǎn)小緊張哈,接下來(lái)我就把我在做iOS開(kāi)發(fā)工程中遇到的一些關(guān)于navigationbar的隱藏、設(shè)置透明度等問(wèn)題跟大家分享一下 很多時(shí)候我們可能會(huì)遇到下圖所示的情況,在這種情況下我們有兩種方式對(duì)其進(jìn)行解決:(1)設(shè)置navigationbar隱藏澄惊,(2)設(shè)置navigationbar透明。
1富雅、navigationbar的隱藏
?[self.navigationController setNavigationBarHidden: YES];//設(shè)置navigationbar隱藏
這么設(shè)置是對(duì)于當(dāng)前頁(yè)面是沒(méi)有問(wèn)題的掸驱,但問(wèn)題在于如果在該頁(yè)面設(shè)置了隱藏,在該跳轉(zhuǎn)到其他頁(yè)面時(shí)也會(huì)自動(dòng)的隱藏掉navigationbar没佑,這就并不是我們想要的毕贼。我們的目的是只在這一個(gè)頁(yè)面隱藏navigationbar。 解決的辦法是在viewWillDisappear中添加如下代碼蛤奢。
(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:NO]; } 這樣做的時(shí)候你會(huì)發(fā)現(xiàn)在在跳轉(zhuǎn)頁(yè)面的時(shí)候沒(méi)有動(dòng)畫(huà)效果了鬼癣,此時(shí)你可以加上一個(gè)動(dòng)畫(huà)效果,很簡(jiǎn)單啤贩,將代碼改成[self.navigationController setNavigationBarHidden:NO animated:YES];即可待秃。
ok,試一下效果
可以看到從下一個(gè)頁(yè)面返回當(dāng)前的頁(yè)面的時(shí)候,會(huì)有很明顯的黑塊痹屹,這是由于在做返回的時(shí)候章郁,navigationbar的隱藏沒(méi)有做動(dòng)畫(huà)效果,在
(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; ? [self.navigationController setNavigationBarHidden: YES animated: YES]; } 這時(shí)候再試一下
已經(jīng)沒(méi)有那些黑色了
BUT志衍,你以為這樣就完美了嗎驱犹?然鵝現(xiàn)實(shí)是殘酷的,并非你想象的那么簡(jiǎn)單足画。
對(duì)于從下一個(gè)頁(yè)面跳轉(zhuǎn)到當(dāng)前頁(yè)面是沒(méi)有任何問(wèn)題,但是如果整個(gè)工程是類似第一張圖片這樣的navigationcontroller嵌套在tabbarcontroller的話佃牛,從其他的tab點(diǎn)擊“我”跳轉(zhuǎn)過(guò)來(lái)淹辞,你會(huì)發(fā)現(xiàn)一個(gè)很明顯的navigationbar上方有一個(gè)向上滑動(dòng)的動(dòng)畫(huà),這樣會(huì)導(dǎo)致出現(xiàn)一個(gè)黑色的橫條一閃而過(guò)俘侠。這又怎么辦呢象缀?經(jīng)過(guò)思考,我能確認(rèn)絕對(duì)是[self.navigationController setNavigationBarHidden:NO animated:YES];導(dǎo)致的爷速,也就是這個(gè)animated:YES導(dǎo)致的央星,但是如果設(shè)成NO,前面也說(shuō)了會(huì)導(dǎo)致從下個(gè)頁(yè)面跳轉(zhuǎn)到本頁(yè)面出現(xiàn)黑塊惫东,設(shè)成YES又會(huì)導(dǎo)致從其他tab頁(yè)面跳轉(zhuǎn)過(guò)來(lái)會(huì)出現(xiàn)黑色長(zhǎng)條莉给,毙石,,颓遏,死結(jié)嗎徐矩??叁幢?滤灯??曼玩?鳞骤??就在我一籌莫展之際黍判,我的師傅出馬了豫尽,一句話:將viewWillAppear和viewWillDisappear中隱藏和顯示navigationbar的動(dòng)畫(huà)全部設(shè)成animated,也就是
(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; ? [self.navigationController setNavigationBarHidden: YES animated: animated]; } OK样悟,大功告成7髂肌!?咚陈症!
BUT!震糖!录肯,師傅說(shuō)了,其實(shí)要實(shí)現(xiàn)這樣的功能吊说,還有別的方法论咏,譬如說(shuō)。颁井。厅贪。我特么給忘了,有點(diǎn)小尷尬雅宾,后邊有時(shí)間在研究研究养涮。
2、navigationbar設(shè)為透明或者半透明眉抬。
?直接上代碼
(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]; }
效果
可以看到導(dǎo)航欄從不透明慢慢變?yōu)橥该鞯囊粋€(gè)過(guò)程贯吓。這樣的效果其實(shí)很難看,具體怎么解決我在后面再繼續(xù)研究一下蜀变,當(dāng)然還有有個(gè)最笨的法子悄谐,自定義navigationbar,就是不用navigationcontroller库北,自己寫(xiě)一個(gè)類似的看著一模一樣的導(dǎo)航欄爬舰。這個(gè)就具體問(wèn)題具體分析啦们陆。