浅谈对UINavigationController(导航控制器)的理解

有时候会遇到这样的情况,一个导航控制器,push出的很多层controller,当我们在不同的页面对导航控制器的显示效果做不同的操作的时候,会发现针对导航控制器的逻辑操作很麻烦。因为是同一个控制器,在某一个页面的操作效果会影响到其他页面上的导航条显示效果,这样会增加控制器之间的耦合度,很不利于开发。
为了解决这样的问题,可以顺着下面的思路解决问题。
导航控制器作用无非两种,一种是push控制器,做页面之间的跳转,另外一种功能是,他是一个view,上面可以显示一些东西,例如按钮,搜索框等等。
既然这样,我们是不是可以把导航控制器功能进行分解,解决上面的问题。
下面介绍一下我的解决方法。
在整个项目中创建一个根导航控制器,这个根导航控制器的作用只用来做页面之间的跳转,不起显示作用,这样我们只要隐藏navigationBar就可以

NavigationController

其实只要把navigationBar隐藏就行,其他的操作看自己的个人功能需求。
以后项目中push的控制器都添加上这个根控制器,这样做的效果就是虽然导航控制器存在,但是push出来的控制器上不在显示navigationBar了。
那么接下来我们要做的就是在push出的控制器view上添加上navigationBar就可以了

ViewController

好了,完成了,以后所有针对导航条的显示上的操作,只要在自己的控制器里就行了
这样做还有一个好处就是push后自带的从屏幕边缘滑动返回不会因为自定义导航栏控制器的返回按钮而取消
另外要注意一点就是页面上继续添加view的时候,frame的问题。
最后分享一个将导航条弄透明的方法,结合上面的代码,很简单只要三行代码

nav设置透明.png

只要这样navBar就变透明了,以后针对导航栏的颜色操作,只要改变里面的navBgView的背景色就可以了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,196评论 4 61
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,674评论 7 249
  • 半夜十一点,候车室,一位老父亲,一位婴儿! 那位父亲就坐在我的对面,衣衫褴褛,怀里躺着一位一岁不足的婴儿,父亲换着...
    Zachary_Ain阅读 1,911评论 1 2
  • 作者设计思路 1.YYMemoryCache YYMemoryCache负责管理内存缓存。这个类是线程安全的。 L...
    WeiHing阅读 3,851评论 0 7
  • “你吃饭喜欢从中间开始挖洞然后向四周发散着吃么?” 我抬起头,看着对面那张半小时前才认识的脸,有点迷茫和不知所措。...
    MsTitanium阅读 3,975评论 0 0