[iOS]隨意修改NavigationBar顏色、附帶全屏手勢(shì)的導(dǎo)航欄

Mango's Blog

UINavigationController

這是一個(gè)非常方便易用的NavigationController,使用系統(tǒng)的導(dǎo)航欄,并且能夠像設(shè)置ViewController的屬性一樣來設(shè)置:顏色、隱藏、手勢(shì) 等屬性。

非常適合不同頁(yè)面 導(dǎo)航欄顏色不同的需求。

GitHub: MMNavigationController

效果圖:

2016-11-12 16_52_24.gif

解決的問題

由于NavigationBar的生命周期是與UINavigationController綁定的,所以UINavigationController的所有子ViewController都共用同一個(gè)NavigationBar,但是在實(shí)際開發(fā)的需求中,常常會(huì)有某個(gè)視圖的導(dǎo)航欄顏色與其它視圖的導(dǎo)航欄顏色不同。

修改某一個(gè)viewController的顏色也不難:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.navigationBar.barTintColor = UIColor.blueColor()
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
}

只是每次需要這么多代碼來解決一個(gè)看似很簡(jiǎn)單的問題,非常麻煩

使用MMNavigationController后只需要一句代碼,即可修改導(dǎo)航欄顏色:

mm_navigationBarBackgroundColor = UIColor.blueColor()

并且支持全屏Pop手勢(shì)

使用

由于Swift不能重寫load方法,所以需要在AppDelegate中調(diào)用UIViewController.mm_load()
然后用MMNavigationController代替UINavigationController

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    /** 高亮 **/
    UIViewController.mm_load()
    let rootViewController = MMNavigationController(rootViewController: NormalViewController())
    /** 高亮 **/
    
    rootViewController.hideBottomLine()
    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    window?.rootViewController = rootViewController
    window?.makeKeyAndVisible()
    return true
}

之后就可以在ViewControllerviewDidLoad中設(shè)置如下屬性了:

override func viewDidLoad() {
    super.viewDidLoad()

     /// 修改當(dāng)前ViewContoller的導(dǎo)航欄的背景顏色
    mm_navigationBarBackgroundColor = UIColor.randomColor()
    
    /// 修改當(dāng)前ViewContoller標(biāo)題顏色
    mm_navigationBarTitleColor = UIColor.whiteColor()
    
    /// 隱藏當(dāng)前ViewContoller的導(dǎo)航欄
     mm_navigationBarHidden = true
     
     
     /** 全屏手勢(shì)相關(guān)屬性 **/
     
     /// pop 手勢(shì)是否可用
     mm_popGestrueEnable = false
     
     /// pop 手勢(shì)響應(yīng)的范圍
     mm_popGestrueEnableWidth = 150
    
}

簡(jiǎn)單易用!

實(shí)現(xiàn)

主要實(shí)現(xiàn)是參考了FDFullscreenPopGesture

運(yùn)用AOP, 在viewWillAppear中進(jìn)行屬性的設(shè)置。

Cocoapods

pod 'MMNavigationController'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,229評(píng)論 4 61
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實(shí)...
    香橙柚子閱讀 24,099評(píng)論 8 183
  • 什么是婚姻?都說相知的人最有可能走進(jìn)婚姻的殿堂。我們?cè)诤线m的時(shí)間相遇,彼此理解,而你卻說,你不是我的良配,我值得更...
    穎子Zoey閱讀 191評(píng)論 0 0
  • (一) 下午放學(xué),媽媽去接龍龍?;貋淼穆飞淆堼堈f道: “媽媽,今天李老師表?yè)P(yáng)了我寫字越寫越漂亮?!保骸芭?,難道還有...
    溫暖媽咪閱讀 449評(píng)論 5 5
  • 做人要有的五種品質(zhì): 【誠(chéng)信】【無私】 【專注】【信任】【遠(yuǎn)見】 【誠(chéng)信】釋義:誠(chéng)信并不是道德的要求。人無信不利,...
    孟遠(yuǎn)閱讀 707評(píng)論 0 0