其實(shí)導(dǎo)航欄是每一個(gè)項(xiàng)目中多多少少會(huì)涉及的部分,從開發(fā)到后期的維護(hù)薇宠,如果導(dǎo)航欄維護(hù)的不錯(cuò)憨栽,那么后續(xù)的開發(fā)也會(huì)簡(jiǎn)單一些浓领,所以記錄下我在開發(fā)中的幾個(gè)思路技巧反镇。
1 原生導(dǎo)航欄
1.1 基礎(chǔ)簡(jiǎn)介
系統(tǒng)的導(dǎo)航欄已經(jīng)可以滿足很多的要求了犯戏,一開始設(shè)置的可以是導(dǎo)航欄的整體框架barStyle送火,
顯而易見,barStyle目前可以使用的只有UIBarStyleDefault和UIBarStyleBlack兩個(gè)值先匪,兩個(gè)值設(shè)置的差異是:
UIBarStyleDefault:狀態(tài)欄和導(dǎo)航欄上的字都是黑色种吸,表面有一層略透明的白色遮罩。
UIBarStyleBlack:狀態(tài)欄和導(dǎo)航欄上的字都是白色的呀非,表面有一層略透明的黑色遮罩坚俗。
而略透明的遮罩在iOS 7之后是由translucent屬性控制,該值默認(rèn)為YES(略透明)岸裙,而設(shè)置為no的時(shí)候猖败,就是完全不透明的狀態(tài):UIBarStyleDefault(全白),UIBarStyleBlack(全黑)
但是設(shè)置圖片之后的話降允,還是沒有太大的差異性恩闻。
1.2 顯示效果
導(dǎo)航欄最重要的部分還是左右按鈕和中間的title或titleView,按鈕的話,主要是系統(tǒng)返回按鈕back是在navigationController上剧董,所以在沒有設(shè)置任何的leftBarButtonItem的情況下會(huì)顯示默認(rèn)的幢尚。中間的字體其實(shí)是固定的,顏色也是黑白兩色送滞,要改成別的顏色或者字體大小以及位置的時(shí)候侠草,使用titleView這個(gè)屬性:
效果圖:
1.3 效果設(shè)置
其實(shí)除了導(dǎo)航欄中間的title或titleView以及左右的按鈕item,更多的效果是配合scrollView的一個(gè)滾動(dòng)犁嗅,在iOS 8之后原生的導(dǎo)航欄添加一些點(diǎn)擊事件的處理,其中比較常見的有:
hidesBarsOnSwipe:當(dāng)向下滑動(dòng)的時(shí)候晤碘,導(dǎo)航欄會(huì)顯示褂微;當(dāng)向上滑動(dòng)的時(shí)候功蜓,導(dǎo)航欄會(huì)消失
hidesBarsOnTap:如果是沒有處理的點(diǎn)擊效果會(huì)讓導(dǎo)航欄消失。
當(dāng)然還有一些不錯(cuò)的處理方法宠蚂,但是處理這些基礎(chǔ)的導(dǎo)航欄消失和消失的效果式撼,還有一個(gè)常用就是滑動(dòng)時(shí)候的動(dòng)態(tài)顏色改變:
這里的話一定要注意不能使用[UINavigationBar appearance]來處理,因?yàn)閇UINavigationBar appearance]獲得的是屏幕中已有的導(dǎo)航欄求厕,滑動(dòng)時(shí)不能改變屏幕中已經(jīng)存在的元素著隆。所以只能在導(dǎo)航欄上面加一層view,通過改變這個(gè)view的顏色實(shí)現(xiàn)動(dòng)態(tài)的顏色改變效果:
滑動(dòng)處理效果:
2 自定義導(dǎo)航欄
2.1基礎(chǔ)元素封裝
其實(shí)封裝的話主要還是因?yàn)樵O(shè)置一些固定位置的圖片呀癣、側(cè)滑效果等美浦,封裝其實(shí)不需要放在NavigationController的類中,可以直接放在rootViewController中项栏。屬性方面:中間標(biāo)題是一定存在的浦辨,但是左邊按鈕的設(shè)置可以添加一個(gè)bool判斷值等:
這樣的話其實(shí)將能將大部分導(dǎo)航欄的顏色、按鈕位置沼沈、分割線固定流酬,而且在RootViewController里面還可以加上轉(zhuǎn)屏相關(guān)的設(shè)置。
導(dǎo)航欄的基礎(chǔ)設(shè)置的話搞明白的話列另,其實(shí)加一些效果的話也不會(huì)很難芽腾。接下來的話可能對(duì)側(cè)滑的實(shí)現(xiàn)技巧研究一下。