{"id":13696701,"url":"https://github.com/QuintGao/GKNavigationBar","last_synced_at":"2025-05-03T17:32:02.179Z","repository":{"id":43326426,"uuid":"219126307","full_name":"QuintGao/GKNavigationBar","owner":"QuintGao","description":"GKNavigationBarViewController的分类实现，耦合度底，使用更便捷","archived":false,"fork":false,"pushed_at":"2025-01-22T07:04:14.000Z","size":3365,"stargazers_count":325,"open_issues_count":3,"forks_count":48,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-08T12:05:05.872Z","etag":null,"topics":["navigation","navigationbar","navigationbaritems","navigationbartransition","push-pop","uinavigationcontroller","uiviewcontroller"],"latest_commit_sha":null,"homepage":"https://www.jianshu.com/p/577755d0d69a","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/QuintGao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-02T08:36:42.000Z","updated_at":"2025-03-31T09:04:17.000Z","dependencies_parsed_at":"2024-01-16T13:22:01.894Z","dependency_job_id":"50b3b189-b60d-4d32-997f-517a87b75212","html_url":"https://github.com/QuintGao/GKNavigationBar","commit_stats":{"total_commits":117,"total_committers":3,"mean_commits":39.0,"dds":0.05982905982905984,"last_synced_commit":"4bf88a5d74d90f8f47a614284fe5852a191d7bbc"},"previous_names":[],"tags_count":72,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuintGao%2FGKNavigationBar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuintGao%2FGKNavigationBar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuintGao%2FGKNavigationBar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuintGao%2FGKNavigationBar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/QuintGao","download_url":"https://codeload.github.com/QuintGao/GKNavigationBar/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252226809,"owners_count":21714871,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["navigation","navigationbar","navigationbaritems","navigationbartransition","push-pop","uinavigationcontroller","uiviewcontroller"],"created_at":"2024-08-02T18:00:45.265Z","updated_at":"2025-05-03T17:32:02.165Z","avatar_url":"https://github.com/QuintGao.png","language":"Objective-C","funding_links":[],"categories":["UI Components"],"sub_categories":[],"readme":"## GKNavigationBar\n\niOS自定义导航栏 - 导航栏联动效果\n\n[![Build Status](http://img.shields.io/travis/QuintGao/GKNavigationBar/master.svg?style=flat)](https://travis-ci.org/QuintGao/GKNavigationBar)\n[![License MIT](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://raw.githubusercontent.com/QuintGao/GKNavigationBar/master/LICENSE)\n[![platform](http://img.shields.io/cocoapods/p/GKNavigationBar.svg?style=flat)](http://cocoadocs.org/docsets/GKNavigationBar)\n[![languages](https://img.shields.io/badge/language-objective--c-blue.svg)](#)\n[![cocoapods](http://img.shields.io/cocoapods/v/GKNavigationBar.svg?style=flat)](https://cocoapods.org/pods/GKNavigationBar)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/QuintGao/GKNavigationBar)\n[![support](https://img.shields.io/badge/support-ios%208%2B-orange.svg)](#) \n\nGKNavigationBarViewController的分类实现方式，耦合度底，使用更加便捷\n\nSwift版本请看这里 → [GKNavigationBarSwift](https://github.com/QuintGao/GKNavigationBarSwift)\n\n## 框架特性\n\n* 无侵入性，低耦合性\n* 支持自定义导航栏样式（隐藏、透明等）\n* 支持控制器开关返回手势\n* 支持控制器开关全屏返回手势\n* 支持控制器设置导航栏透明度，可实现渐变效果\n* 完美解决UITableView，UIScrollView滑动手势冲突\n* 可实现push，pop时控制器缩放效果（如：今日头条）\n* 可实现左滑push一个控制器的效果（如：网易新闻）\n\n## 1.7.0版本升级指南\n1.7.0版本重写了导航栏item间距调整的逻辑，1.7.0版本之后导航栏item间距调整只对使用GKCustomNavigationBar的控制器默认开启，其他控制器不会调整导航栏item间距，所以需要注意下面几点：  \n1、对于使用GKCustomNavigationBar的控制器，无需修改，如果想关闭导航栏间距调整设置gk_disableFixNavItemSpace即可        \n2、对于使用系统导航栏的控制器，如果想要调整导航栏间距，需要在viewDidLoad中设置gk_openFixNavItemSpace为YES 全局配置是无效的。       \n3、去掉了shiledItemSpaceVCs属性，可在单独控制器中处理。\n\n## 使用\n### 1、在AppDelegate中添加导航配置\n\n```\n[GKConfigure setupDefaultConfigure]\n```\n\n### 2、创建根导航控制器\n若要开启手势处理，需使用+ (instancetype)rootVC:(UIViewController *)rootVC方法创建导航控制器\n\n```\nUINavigationController *nav = [UINavigationController rootVC:[GKMainViewController new]];\n```\n\n### 3、设置导航栏属性（调用即创建）\n```\nself.gk_navBackgroundColor = [UIColor red]\n```\n\n\n## 安装\n\u003cdetails open\u003e\n  \u003csummary\u003e\u003cfont size=3\u003eCocoaPods\u003c/font\u003e\u003c/summary\u003e\n\n```\n# 将以下内容添加到您的Podfile中：\npod 'GKNavigationBar'\n\n// 只使用手势处理\npod 'GKNavigationBar/GestureHandle'\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cfont size=3\u003eCarthage\u003c/font\u003e\u003c/summary\u003e\n\n```\nCartfile文件中添加以下内容\ngithub \"QuintGao/GKNavigationBar\"\n\n执行carthage update --platform iOS\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cfont size=3\u003eSPM\u003c/font\u003e\u003c/summary\u003e\n\n```\n在Xcode中点击File-\u003eSwift Packages-\u003eAdd Package Dependency，然后输入https://github.com/QuintGao/GKNavigationBar\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cfont size=3\u003e手动导入\u003c/font\u003e\u003c/summary\u003e\n\n```\n直接拖入GKNavigationBar文件夹到项目，#import \"GKNavigationBar.h\"，开始使用\n```\n\u003c/details\u003e\n\n## 常见问题\n感谢使用该库，如果在使用过程中遇到问题可查看issue或提交issue，或者进QQ群1047100313  \n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cfont size=3\u003e1、手势不生效？\u003c/font\u003e\u003c/summary\u003e\n\n```\n1、查看是否使用了+ (instancetype)rootVC:(UIViewController *)rootVC 方法初始化导航控制器  \n2、查看是否在控制器中禁用了手势返回self.gk_interactivePopDisabled = YES，self.gk_fullScreenPopDisabled = YES\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cfont size=3\u003e2、导航栏不显示？\u003c/font\u003e\u003c/summary\u003e\n\n```\n查看是否调用了跟导航栏相关的方法，如self.gk_navTitle = @\"GKNavigationBar\"  \n注意：只有调用跟导航栏相关的方法才会初始化导航栏！\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cfont size=3\u003e3、切换控制器的时候出现状态栏显示异常（一半黑一半白等）\u003c/font\u003e\u003c/summary\u003e\n\n```\n解决办法：在控制器初始化方法里面设置状态栏样式\n- (instancetype)init {\n    if (self = [super init]) {\n        self.gk_statusBarStyle = UIStatusBarStyleLightContent;\n    }\n    return self;\n}\n\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cfont size=3\u003e4、状态栏相关方法无效？\u003c/font\u003e\u003c/summary\u003e\n\n```\n解决办法：在基类控制器里实现下面两个方法\n- (BOOL)prefersStatusBarHidden {\n    return self.gk_statusBarHidden;\n}\n\n- (UIStatusBarStyle)preferredStatusBarStyle {\n    return self.gk_statusBarStyle;\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cfont size=3\u003e5、返回手势如何拦截？\u003c/font\u003e\u003c/summary\u003e\n\n```\n// 重写下面的方法，拦截返回手势\n#pragma mark - GKGesturePopHandlerProtocol\n- (BOOL)navigationShouldPop {\n    // do something\n    \n    return NO;\n}\n\n也可以单独处理点击返回和手势返回\n\n// 重写下面的方法，拦截点击返回\n- (BOOL)navigationShouldPopOnClick {\n    // do something\n    \n    return NO;\n}\n// 重写下面的方法，拦截手势返回\n- (BOOL)navigationShouldPopOnGesture {\n    // do something\n    \n    return NO;\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cfont size=3\u003e6、如何与系统导航平滑过渡？\u003c/font\u003e\u003c/summary\u003e\n\n```\n1、开启系统导航过渡处理 nav.gk_openSystemNavHandle = YES;\n2、在控制器中设置gk_popDelegate并实现下面的方法\n#pragma mark - GKViewControllerPopDelegate\n- (void)viewControllerPopScrollBegan {\n    \n}\n\n- (void)viewControllerPopScrollUpdate:(float)progress {\n    // 由于已经出栈，所以self.navigationController为nil，不能直接获取导航控制器\n    UIViewController *vc = [GKConfigure visibleViewController];\n    vc.navigationController.navigationBar.alpha = 1 - progress;\n}\n\n- (void)viewControllerPopScrollEnded:(BOOL)finished {\n    // 由于已经出栈，所以self.navigationController为nil，不能直接获取导航控制器\n    UIViewController *vc = [GKConfigure visibleViewController];\n    vc.navigationController.navigationBar.alpha = 1;\n    vc.navigationController.navigationBarHidden = finished;\n}\n```\n\u003c/details\u003e\n\n## 版本记录\n\n\u003cdetails open\u003e\n  \u003csummary\u003e\u003cfont size=4\u003e最近更新\u003c/font\u003e\u003c/summary\u003e\n\n```\n* 1.9.3 - 2025.01.15 导航栏高度优化，适配最新屏幕\n* 1.9.0 - 2024.03.21 1、tabBar截屏清除优化 2、增加隐私清单\n* 1.8.9 - 2024.01.16 修复开启缩放后的异常问题 #111\n* 1.8.8 - 2023.10.13 适配iOS17，修复非全屏模式的bug\n* 1.8.7 - 2023.08.15 导航栏部分属性支持StoryBoard，手势处理优化\n* 1.8.6 - 2023.07.17 修复导航栏间距调整可能无效的问题\n* 1.8.5 - 2023.06.28 导航栏宽度适配Mac\n* 1.8.4 - 2023.03.29 修复导航栏间距调整bug\n* 1.8.3 - 2023.03.24 1、push、pop转场动画修改为只截取tabBar播放 2、缩放转场动画优化\n* 1.8.2 - 2022.12.27 iPhone 14适配优化\n* 1.8.1 - 2022.09.29 移除导航栏上的点击事件\n* 1.8.0 - 2022.09.16 导航栏高度适配iPhone 14系列新设备\n* 1.7.9 - 2022.08.18 修复侧滑返回可能出现导航栏间距不准确问题\n* 1.7.8 - 2022.08.16 屏蔽导航栏的touches事件和点击事件\n* 1.7.7 - 2022.07.29 修复当子控制器有GKNavigationBar时，导航栏item间距失效的问题 #103\n* 1.7.6 - 2022.07.22 修复只设置backImage后，返回按钮显示错误的问题\n* 1.7.5 - 2022.06.22 优化backImage的显示\n* 1.7.4 - 2022.04.20 修复设置背景色为[UIColor clearColor]无效的bug #100，#101\n* 1.7.3 - 2022.04.15 导航栏设置适配iOS13及以后\n* 1.7.2 - 2022.03.21 细节优化，修复push UITabBarController时的问题\n* 1.7.1 - 2022.03.09 根控制器左侧item处理优化，暗黑模式适配优化\n* 1.7.0 - 2022.02.25 导航栏item间距优化处理\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cfont size=4\u003e历史更新\u003c/font\u003e\u003c/summary\u003e\n\n```\n* 1.6.6 - 2022.01.26 新机型适配优化\n* 1.6.5 - 2022.01.20 修复设置gk_disableFixNavItemSpace后gk_disableFixSpace无效的bug#93\n* 1.6.4 - 2022.01.04 新增darkBackgroundImage、darkLineImage等适配暗黑模式导航图片\n* 1.6.2 - 2021.12.29 修复设置gk_disableFixSpace为YES无效的bug #16\n* 1.6.1 - 2021.11.08 1、修复设置gk_systemGestureHandleDisabled后TabBar偏移问题 #90\n                   2、新增gk_hidesBottomBarWhenPushed，可全局配置push时是否隐藏TabBar\n* 1.6.0 - 2021.09.09 修复visibleViewController方法返回错误问题\n* 1.5.9 - 2021.06.25 配置类增加backgroundImage，可设置全局导航图片\n* 1.5.8 - 2021.06.09 增加恢复系统导航栏显示的逻辑及方法 #86\n* 1.5.7 - 2021.05.20 修复bug #78，创建导航栏item方法优化\n* 1.5.6 - 2021.05.18 优化导航栏返回按钮及高度处理#77，手势处理优化\n* 1.5.5 - 2021.05.14 修复导航栏间距失效的问题#76\n* 1.5.4 - 2021.05.12 修复可能提前触发viewDidLoad方法的问题\n* 1.5.3 - 2021.05.07 修复直接设置背景色无效的问题#71，#74，增加对非全屏的支持\n* 1.5.2 - 2021.04.06 增加协议方法，解决返回手势与WKWebView中的手势冲突问题\n* 1.5.1 - 2021.03.09 返回手势优化，新增backStyle对应的image，可全局配置\n* 1.5.0 - 2021.03.05  \n----1、优化状态栏样式修改及显隐方法，可以不用在基类实现相关方法  \n----2、导航栏添加机制优化，修复某些情况下可能出现两个导航栏的bug  \n----3、增加全局开启UIScrollView手势处理方法\n* 1.4.3 - 2021.02.23 导航栏高度适配优化，导航栏间距调整优化，控制器增加禁止导航栏间距调整属性#62 #67\n* 1.4.2 - 2021.02.20 返回拦截优化，增加同时处理点击返回和手势返回的方法\n* 1.4.1 - 2021.02.07 暗黑模式适配优化，导航栏背景色和分割线颜色支持设置动态颜色\n* 1.4.0 - 2020.12.25 修复边缘滑动返回失效的bug #60\n* 1.3.9 - 2020.12.24 手势处理优化，解决可能出现的卡死问题，push、pop手势灵敏度优化\n* 1.3.7 - 2020.12.05 手势处理优化，增加禁用系统手势处理属性\n* 1.3.6 - 2020.12.02 修复iPhone 12，iPhone 12 Pro机型导航栏间距调整不准确的bug\n* 1.3.4 - 2020.12.01 修复可能出现的卡死情况#53\n* 1.3.3 - 2020.11.29 手势滑动优化，支持与系统导航平滑衔接、控制器屏蔽支持部分匹配\n* 1.3.0 - 2020.10.29 功能模块拆分，可按需pod不同模块\n* 1.2.0 - 2020.10.26 优化代码宏定义，增加自定义转场demo\n* 1.1.8 - 2020.10.22 适配iPhone 12 系列手机，增加自定义转场动画属性\n* 1.1.6 - 2020.09.09 修复左滑push卡住不动的bug\n* 1.1.5 - 2020.08.14 修复屏蔽控制器无效的bug\n* 1.1.3 - 2020.07.28 修复导航栏标题或颜色不生效的bug\n* 1.1.2 - 2020.07.27 修复方法交换可能带来的crash问题\n* 1.1.1 - 2020.07.23 修复手势处理对根控制器的影响\n* 1.1.0 - 2020.07.22 修复手势处理存在的问题，增加属性可屏蔽某些控制器对手势处理的影响\n* 1.0.9 - 2020.07.16 增加gk_backImage，可自定义返回按钮图片\n* 1.0.8 - 2020.07.06 增加某些控制器对导航栏间距调整的影响\n* 1.0.7 - 2020.06.22 设置导航栏间距不再局限于GKNavigationBar\n* 1.0.6 - 2020.06.18 修复设置导航栏间距失效的bug\n* 1.0.0 - 2020.01.14 修复设置某个导航栏间距后其他导航栏间距不准确问题\n* 0.0.5 - 2020.01.02 修复某些情况下状态栏显示异常问题\n* 0.0.4 - 2019.12.22 优化状态栏切换功能\n* 0.0.3 - 2019.11.12 修复设置导航栏左右间距无效的问题\n* 0.0.2 - 2019.11.04 优化代码，解决只调用gk_navigationItem时导航栏不出现的bug\n* 0.0.1 - 2019.11.03 对GKNavigationBarViewController做了修改，使用更方便\n```\n\u003c/details\u003e\n\n## 作者\n\n- QQ： [1094887059](http://wpa.qq.com/msgrd?v=3\u0026uin=1094887059\u0026site=qq\u0026menu=yes)  \n- QQ群：[1047100313](https://qm.qq.com/cgi-bin/qm/qr?k=Aj_f4C5-R3X1_KEdeb_Ttg8pxK_41ZJu\u0026jump_from=webapi)\n\n- [简书](https://www.jianshu.com/u/ba61bbfc87e8)\n\n- 支持作者\n\n\u003cimg src=\"https://upload-images.jianshu.io/upload_images/1598505-1637d63e4e18e103.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240\" width=\"200\" height=\"200\"\u003e\n\u0026nbsp\u0026nbsp\u0026nbsp\u0026nbsp\u0026nbsp\u0026nbsp\u0026nbsp\u0026nbsp\u0026nbsp\u0026nbsp\u0026nbsp\u0026nbsp\n\u003cimg src=\"https://upload-images.jianshu.io/upload_images/1598505-0be88fd4943d1994.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240\" width=\"200\" height=\"200\"\u003e\n\n[回到顶部](#readme)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FQuintGao%2FGKNavigationBar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FQuintGao%2FGKNavigationBar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FQuintGao%2FGKNavigationBar/lists"}