项目名: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版本等)可以看出其在不断完善。希望大家对这个项目有更多的了解和探索,如果有任何想法或者使用中的问题,欢迎在评论区留言讨论。
项目地址
数据统计
数据评估
本站链氪巴士提供的GKNavigationBarViewController-实现iOS自定义导航栏与导航栏联动都来源于网络,不保证外部链接的准确性和完整性,同时,对于该外部链接的指向,不由链氪巴士实际控制,在2024年12月6日 上午12:00收录时,该网页上的内容,都属于合规合法,后期网页的内容如出现违规,可以直接联系网站管理员进行删除,链氪巴士不承担任何责任。