這是一個(gè)非常方便易用的NavigationController,使用系統(tǒng)的導(dǎo)航欄,并且能夠像設(shè)置ViewController的屬性一樣來設(shè)置:顏色、隱藏、手勢(shì) 等屬性。
非常適合不同頁(yè)面 導(dǎo)航欄顏色不同的需求。
GitHub: MMNavigationController
效果圖:
解決的問題
由于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
}
之后就可以在ViewController
的viewDidLoad
中設(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'