MMNavigationController 0.1.0

MMNavigationController 0.1.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2017年9月
SwiftSwift版本4.0
SPM支持SPM

MangoMade维护。



  • MangoMade

解决的问题

由于NavigationBar的生命周期是与UINavigationController绑定的,因此所有的ViewController都共用同一个NavigationBar,但在实际开发中,往往需要某个视图的导航栏颜色与其它视图的导航栏颜色不同。

修改某个viewController的颜色也不难:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.navigationBar.barTintColor = UIColor.blue
}
    
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationController?.navigationBar.barTintColor = UIColor.white
}

但是每次都需要这样的代码来解决一个看似简单的问题,非常麻烦

使用MMNavigationController后只需要一句代码,即可修改导航栏颜色:

mm.navigationBarBackgroundColor = UIColor.blue

同时支持全屏Pop手势

效果图:

2016-11-12 16_52_24.gif

使用

由于Swift不能重写load方法,因此需要在AppDelegate中调用UIViewController.mm.load()
然后用MMNavigationController替换UINavigationController

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    /** 高亮 **/
    UIViewController.mm.load()
    let rootViewController = MMNavigationController(rootViewController: NormalViewController())
    /** 高亮 **/
    
    rootViewController.hideBottomLine()
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.rootViewController = rootViewController
    window?.makeKeyAndVisible()
    return true
}

之后就可以在ViewControllerviewDidLoad中设置如下属性了:

override func viewDidLoad() {
    super.viewDidLoad()

     /// 修改当前ViewContoller的导航栏的背景颜色
    mm.navigationBarBackgroundColor = UIColor.random
    
    /// 修改当前ViewContoller标题颜色
    mm.navigationBarTitleColor = UIColor.white
    
    /// 隐藏当前ViewContoller的导航栏
    mm.navigationBarHidden = true
     
     
     /** 全屏手势相关属性 **/
     
     /// pop 手势是否可用
    mm.popGestrueEnable = false
     
     /// pop 手势响应的范围
    mm.popGestrueEnableWidth = 150
}

简单易用!

实现

主要实现是参考了FDFullscreenPopGesture

通过AOP,在viewWillAppear中进行属性设置。

要求

  • iOS 8.0
  • XCode 8.0
  • Swift 3.0
  • Swift 2.x请使用 0.0.1