链氪巴士
  1. 首页
  2. 站点导航
  3. 文章
  4. 快讯
  5. 软件
  6. 书刊
  7. 关于

GKNavigationBarViewController-实现iOS自定义导航栏与导航栏联动

GKNavigationBarViewController是一个iOS开发框架,可让每个控制器拥有自己的导航栏并方便改变样式。很多APP有导航栏联动效果,作者参考资料编写此框架。它支持自定义导航栏样式、开关返回手势、设置导航栏透明度渐变等。能解决UITableView等滑动手势冲...

访问官网 →

项目名:GKNavigationBarViewController-实现iOS自定义导航栏与导航栏联动

一、项目简介

GKNavigationBarViewController是一个用于iOS开发的框架。它可以让每个控制器拥有自己的导航栏,并且方便改变导航栏样式等。目前大多数APP有导航栏联动效果,例如网易新闻、网易云音乐、腾讯视频等,作者通过查找资料及参考其他库,编写了这个框架。它具有诸多特性,如支持自定义导航栏样式(隐藏、透明等)、支持控制器开关返回手势、支持控制器设置导航栏透明度实现渐变效果等。

二、核心技术

  1. 自定义导航栏相关属性 -在UINavigationController中定义了如gk_translationScale(导航栏转场时是否缩放)、gk_openScrollLeftPush(是否开启左滑push操作)等属性。 -在UIViewController中定义了gk_interactivePopDisabled(是否禁止当前控制器的滑动返回)等多个属性来控制导航栏相关的交互和显示。 -在GKNavigationBarViewController中定义了如gk_navigationBar(自定义导航条)、gk_navigationItem(自定义导航栏栏目)等属性,并且还有如gk_navBarTintColor等一系列额外的快速设置导航栏的属性。
  2. 解决手势冲突和适配问题 -针对与IQKeyboardManager滑动返回错乱问题,通过修改IQKeyBoardManager源码,将系统导航手势修改为自定义手势来解决。 -在不同版本中不断优化手势处理逻辑,如在2021.04.06-3.0.1版本增加协议解决返回手势与其他手势冲突问题,并且在2020.12.26-2.7.0版本对手势处理进行优化。 -对不同iOS版本和机型进行适配,如iOS14安全区域适配(2020.10.23-2.6.3版本)、适配iPhone12系列手机(2020.10.19-2.6.2版本修改对刘海屏的判断)等。

三、实践案例

  1. 今日头条的实现 -以UINavigationController作为根控制器,包含一个UITabBarController,UITabBarController中包含以GKNavigationBarViewController为父类的子类。在创建导航栏时,如果根控制器是导航控制器并且需要缩放,可进行相应设置。
  2. 网易云音乐的实现 -以UITabBarController作为根控制器,包含带导航栏的以GKNavigationBarViewController为父类的子类。
  3. 网易新闻的实现 -以UITabBarController作为根控制器,包含带导航栏的以GKNavigationBarViewController为父类的子类,并且导航栏开启左滑push手势,涉及到如设置gk_openScrollLeftPush属性、设置push的代理并实现代理方法等操作。

四、项目总结

GKNavigationBarViewController为iOS开发者在自定义导航栏及实现导航栏联动方面提供了丰富的功能。从它不断更新版本解决各种问题(如导航栏间距处理、手势冲突、适配不同机型和iOS版本等)可以看出其在不断完善。希望大家对这个项目有更多的了解和探索,如果有任何想法或者使用中的问题,欢迎在评论区留言讨论。

项目地址

GitHub链接直达