iOS开发iOS开发iOS 知识点

iOS自定义导航栏-导航栏联动(一)

2017-07-19  本文已影响621人  QuintGao

iOS自定义导航栏-导航栏联动(一)
iOS自定义导航栏-导航栏联动(二)

前言

最近通过对一些APP的观察发现,现在绝大多数的APP都会有导航栏联动效果即:返回时导航栏会随着控制器一起返回,那么我们应该如何来处理这种情况呢,经过研究及查找资料发现有以下两种方式

GKNavigationController使用的是第二种方法,下面具体说一下实现方法及用法。

一 - 实现介绍

首先看一下下面的层次结构

层次结构
1. 根控制器的导航控制器  
                  GKNavigationController
                        - GKWrapViewController
                            - GKWrapNavigationController
                                - 你的VC1
                      ... push
                        - GKWrapViewController
                            - GKWrapNavigationController
                                - 你的VC2

2. UITabBarController作为根控制器
        UITabBarController
            tab1
                GKNavigationController
                    - GKWrapViewController
                        - GKWrapNavigationController
                            - 你的VC1
            tab2
                GKNavigationController
                    - GKWrapViewController
                        - GKWrapNavigationController
                            - 你的VC2
            ...

  1. 如果根控制器是导航控制器,则先将传入的控制器包装一层导航控制器GKWrapNavigationController,再将导航控制器包装一层控制器GKWrapViewController,然后再交个根控制器GKNavigationController来管理,它可以管理所有控制器的push和pop操作
  2. 如果根控制器是UITabBarController,原理相同,只是将多个GKNavigationController分开来管理
  3. 如果根控制器是导航控制器,然后再push了一个UITabBarController,这里将会造成一个bug:由于UITabBarController及其子控制器都是经过包装而成的,push过后会出现子类的导航栏不能显示,我这里的暂时处理办法是将UITabBarController的导航栏移除,但是会造成子类控制器的返回按钮无法显示,因此需要在每个子类中重写navigationItem.leftBarButtonItem

二 - 框架特性

三 - Demo部分截图

001.png 002.png 003.png 004.png 005.png 006.png

缺陷及不足

结语

这个框架是我在业余时间抽空写的,其中也参考了其他的一些框架如:
RTRootNavigationControllerFDFullscreenPopGesture
这里特别感谢两位大神的杰作,我还只是小白,希望有感兴趣的同行可以一起交流,另外如果你对这个框架喜欢的话,就去来个Star吧

github地址:
GKNavigationController
GKNavigationBarViewController

简书地址:
iOS自定义导航栏-导航栏联动(一)
iOS自定义导航栏-导航栏联动(二)

上一篇 下一篇

猜你喜欢

热点阅读