有時(shí)候會(huì)遇到這樣的情況,一個(gè)導(dǎo)航控制器,push出的很多層controller,當(dāng)我們?cè)诓煌捻?yè)面對(duì)導(dǎo)航控制器的顯示效果做不同的操作的時(shí)候,會(huì)發(fā)現(xiàn)針對(duì)導(dǎo)航控制器的邏輯操作很麻煩。因?yàn)槭峭粋€(gè)控制器,在某一個(gè)頁(yè)面的操作效果會(huì)影響到其他頁(yè)面上的導(dǎo)航條顯示效果,這樣會(huì)增加控制器之間的耦合度,很不利于開發(fā)。
為了解決這樣的問題,可以順著下面的思路解決問題。
導(dǎo)航控制器作用無非兩種,一種是push控制器,做頁(yè)面之間的跳轉(zhuǎn),另外一種功能是,他是一個(gè)view,上面可以顯示一些東西,例如按鈕,搜索框等等。
既然這樣,我們是不是可以把導(dǎo)航控制器功能進(jìn)行分解,解決上面的問題。
下面介紹一下我的解決方法。
在整個(gè)項(xiàng)目中創(chuàng)建一個(gè)根導(dǎo)航控制器,這個(gè)根導(dǎo)航控制器的作用只用來做頁(yè)面之間的跳轉(zhuǎn),不起顯示作用,這樣我們只要隱藏navigationBar就可以

其實(shí)只要把navigationBar隱藏就行,其他的操作看自己的個(gè)人功能需求。
以后項(xiàng)目中push的控制器都添加上這個(gè)根控制器,這樣做的效果就是雖然導(dǎo)航控制器存在,但是push出來的控制器上不在顯示navigationBar了。
那么接下來我們要做的就是在push出的控制器view上添加上navigationBar就可以了

好了,完成了,以后所有針對(duì)導(dǎo)航條的顯示上的操作,只要在自己的控制器里就行了
這樣做還有一個(gè)好處就是push后自帶的從屏幕邊緣滑動(dòng)返回不會(huì)因?yàn)樽远x導(dǎo)航欄控制器的返回按鈕而取消
另外要注意一點(diǎn)就是頁(yè)面上繼續(xù)添加view的時(shí)候,frame的問題。
最后分享一個(gè)將導(dǎo)航條弄透明的方法,結(jié)合上面的代碼,很簡(jiǎn)單只要三行代碼

只要這樣navBar就變透明了,以后針對(duì)導(dǎo)航欄的顏色操作,只要改變里面的navBgView的背景色就可以了