PS:大家可以在自己的UINavigationController的rootViewController中先不停的在左側(cè)邊右滑,做類似滑動(dòng)返回的操作,多做幾次,然后在點(diǎn)擊某個(gè)Button或cell跳轉(zhuǎn)到下級(jí)界面,很多時(shí)候在這里會(huì)卡?。▋H限自定義過導(dǎo)航返回按鈕的工程)
很多中小型項(xiàng)目UI都是使用UITabBarController+UINavigationController來搭建項(xiàng)目的基本開發(fā)框架,但是系統(tǒng)的基本功能無法滿足產(chǎn)品UI的需求,因此UITabBarController和UINavigationController都需要我們進(jìn)行自定義。
兩者的自定義其實(shí)都很簡單,直接構(gòu)造一個(gè)子類,在子類中對(duì)原生的按鈕、背景的顏色和文字等進(jìn)行修改。
新建一個(gè)類AANavigationController繼承自UINavigationController,其中包含兩個(gè)類別,一個(gè)控制按鈕與邊界的距離,一個(gè)控制支持的方向,可根據(jù)自己的需求來選擇是否需要和修改。關(guān)于這兩個(gè)類別,只貼代碼,不進(jìn)行過多說明。
PS:在這篇文章中,我只貼圖片,不貼代碼。Why ??不是我作,貼代碼,很多人就會(huì)選擇復(fù)制粘貼,對(duì)于一個(gè)程序員,復(fù)制粘貼的東西,你永遠(yuǎn)不會(huì)記在腦海里,但如果是自己一行一行敲出來的,哪怕不是自己寫的,效果就有天翻地覆的差別。

margin類別的實(shí)現(xiàn):

Rotation類別的實(shí)現(xiàn):

AANavigationController的實(shí)現(xiàn),因?yàn)樽约喉?xiàng)目需求,在這里只進(jìn)行導(dǎo)航條背景顏色和標(biāo)題顏色修改,返回按鈕樣式自定義。(因?yàn)檫@些在我們的項(xiàng)目中都是統(tǒng)一的)
自定義返回按鈕,會(huì)導(dǎo)致滑動(dòng)返回功能失效,在這里需要進(jìn)行開啟,但并不是所有地方我們都需要進(jìn)行滑動(dòng)返回,該禁止的地方還是要禁止。


很多工程都是使用UITabBarController+UINavigationController,UITabBarController中每一個(gè)item都是一個(gè)控制器,這時(shí),我們還需要在UITabBarController中禁止導(dǎo)航的rootViewController的滑動(dòng)返回。
以下是繼承于UITabBarController的類的實(shí)現(xiàn):主要是使用UINavigationControllerDelegate來控制返回到rootViewController時(shí),禁止滑動(dòng)返回功能。
最開始時(shí),本想在自定義的導(dǎo)航控制器中對(duì)根視圖進(jìn)行禁止操作,經(jīng)過測(cè)試,pop方法被執(zhí)行時(shí),導(dǎo)航控制器中的controllers還是2個(gè),此時(shí)進(jìn)行禁止操作,對(duì)頁面會(huì)有影響,具體的影響忘記了(好像是有時(shí)候我們滑動(dòng)返回到一半時(shí),又不想返回,just joke,自動(dòng)彈回當(dāng)前頁面,這種情況會(huì)導(dǎo)致當(dāng)前頁無法使用滑動(dòng)返回功能,有興趣的可以自行測(cè)試),所以只能在徹底返回到root時(shí)再下手。

