{"id":21373924,"url":"https://github.com/chenliangloveyou/EasyNavigation","last_synced_at":"2025-07-13T08:31:44.226Z","repository":{"id":56909753,"uuid":"102011185","full_name":"chenliangloveyou/EasyNavigation","owner":"chenliangloveyou","description":"一款超级简单的导航条管理工具。完全自定义导航条。没有UINavigationBar 和 UINavigationItem 这两个类。完全是对UIView的操作。","archived":false,"fork":false,"pushed_at":"2018-10-12T15:19:09.000Z","size":18040,"stargazers_count":397,"open_issues_count":17,"forks_count":94,"subscribers_count":18,"default_branch":"master","last_synced_at":"2024-10-18T19:29:26.875Z","etag":null,"topics":["ios11","ios12","iphone-xs","iphone-xs-max","iphonex","navigation","navigation-controller","navigationbar","navigationview"],"latest_commit_sha":null,"homepage":"","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/chenliangloveyou.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}},"created_at":"2017-08-31T14:44:42.000Z","updated_at":"2024-01-28T06:34:45.000Z","dependencies_parsed_at":"2022-08-20T19:50:35.844Z","dependency_job_id":null,"html_url":"https://github.com/chenliangloveyou/EasyNavigation","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenliangloveyou%2FEasyNavigation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenliangloveyou%2FEasyNavigation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenliangloveyou%2FEasyNavigation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenliangloveyou%2FEasyNavigation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chenliangloveyou","download_url":"https://codeload.github.com/chenliangloveyou/EasyNavigation/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225553454,"owners_count":17487295,"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":["ios11","ios12","iphone-xs","iphone-xs-max","iphonex","navigation","navigation-controller","navigationbar","navigationview"],"created_at":"2024-11-22T08:29:35.755Z","updated_at":"2024-11-22T08:29:58.295Z","avatar_url":"https://github.com/chenliangloveyou.png","language":"Objective-C","funding_links":[],"categories":["OOM-Leaks-Crash"],"sub_categories":["Navigation"],"readme":"\n\n \u003cimg src=\"logo/horizontal-color.png\" width=\"508\" height=\"97\" alt=\"EasyNavigation\" title=\"EasyNavigation\"\u003e   Provided by [anharismail](https://github.com/anharismail)\n\n .\n \n一款超级简单的导航条管理工具。完全自定义导航条。没有`UINavigationBar` 和 `UINavigationItem` 这两个类。完全是对`UIView`的操作。\n所有操作都能一行代码，操作之间完全独立，互不影响。\n\n![](https://img.shields.io/cocoapods/v/EasyNavigation.svg?style=flat)\n![](https://img.shields.io/badge/language-ObjectiveC-orange.svg)\n![](https://img.shields.io/cocoapods/v/{EasyNavigation}.svg?style=flat)\n![](https://img.shields.io/badge/platform-ios-lightgrey.svg)\n[![](https://badges.frapsoft.com/os/mit/mit.svg?v=103)](https://opensource.org/licenses/mit-license.php)\n\n\n# 集成方法\n\n### 手动导入\n1. 将工程中的`EasyNavigation`拖入工程中\n2. 包含`'EasyNavigation.h`的头文件\n3. 使用：\n    1. 设置全局信息:`EasyNavigationOptions *options = [EasyNavigationOptions shareInstance].titleColor = [UIColor blackColor];`\n    2. 设置全局信息自定义:`EasyNavigationController *navVC = [[EasyNavigationController alloc]initWithRootViewController:[ViewController new]];`\n    3. 在当前控制器上添加一个标题：`[self.navigationView setTitle:@\"我是标题\"];`\n    4. 在当前导航条右边添加一个按钮：` [self.navigationView addRightButtonWithTitle:@\"提交\" clickCallBack:^(UIView *view) { NSLog(@\"提交按钮被点击!\");//notice：这个callback会强引用控制器，请用weakself. }];`\n      4. ......\n\n### cocoapods安装\n1. 在你的podfile文件中加入这句话 `pod 'EasyNavigation','~\u003e1.0'`\n2. 包含头文件`#import \u003cEasyNavigation/EasyNavigation.h\u003e`\n3. 和`手动导入`一样\n\n\n# 使用详解\n\n__配置全局导航栏属性__ 这一步操作可以确保每一个控制器上头都有一个自定义的导航条。\n\n* (1) 包涵头文件\n* (2) (可省略)改变一些导航条的全局设置，但是如果省略的就会默认使用其单例里面的设置信息\n* (3) 用navigationcontroller包裹controller的时候，使用EasyNavigationController。如果是tabbar的话，则tabbar的每一个item都需要使用EasyNavigationController。如果使用的xib，则需要把xib中的导航控制器改成EasyNavigationController。\n\n```\n//（1）包涵头文件\n#import \"EasyNavigation.h\"\n```\n```\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    \n    //（2）(可省略)改变一些导航条的全局设置，但是如果省略的就会默认使用其单例里面的设置信息\n    EasyNavigationOptions *options = [EasyNavigationOptions shareInstance];\n    options.titleColor = [UIColor blackColor];\n    options.buttonTitleFont = [UIFont systemFontOfSize:18];\n    options.navBackgroundImage = [UIImage imageNamed:@\"nav_background_image.png\"];\n    \n    //(3) 用navigationcontroller包裹controller的时候，使用EasyNavigationController。如果是tabbar的话，则tabbar的每一个item都需要使用EasyNavigationController。如果使用的xib，则需要把xib中的导航控制器改成EasyNavigationController。\n    EasyNavigationController *navVC = [[EasyNavigationController alloc]initWithRootViewController:[ViewController new]];\n    self.window.rootViewController  = navVC ;\n\n    return YES;\n}\n```\n_【preview】_\n\n![image](https://github.com/chenliangloveyou/EasyNavigation/blob/master/nav_preview/home@2x.png)\n\n\n## 导航栏上的控件增删改操作\n\n下面所有的操作，首先需要包含头文件\n`#import \"EasyNavigation.h\"`\n#### 1,添加标题\n```\n  [self.navigationView setTitle:@\"我是标题\"];\n  //需要改变标题上的文字\n  [self.navigationView setTitle:@\"我是改变后的标题\"];\n  //改变标题上面的属性\n   self.navigationView.titleLabel.font = [UIFont systemFontOfSize:12] ;\n   self.navigationView.titleLabel.textColor = [UIColor redColor];\n  \n  //需要添加一个titleview\n  [self.navigationView addtitleView:customView];\n```\n\n#### 2,添加按钮\n\n```\n//添加一个文字按钮 ，可以用全局变量记下这个rightButton。在你接下来的操作中使用这个按钮，\nself.rightButton = [self.navigationView addRightButtonWithTitle:@\"添加\" clickCallBack:nil];\n //在某处使用这个按钮\n [self.rightButton setTitle:@\"改变了\" forState:UIControlStateNormal];\n\n```\n```\n//添加一个带图片的按钮，如果这个按钮只有点击事件，可以这样写，更加简洁。\n[self.navigationView addRightButtonWithImage:kImage(@\"button_normal.png\") hightImage:kImage(@\"button_select.png\") clickCallBack:^(UIView *view) {\n        NSLog(@\"点击了“图片按钮按钮”\");\n}];\n```\n```\n//添加自定义按钮(clickCallback会对self强引用)\n kWeakSelf(self)\n UIButton *addButton  =[UIButton buttonWithType:UIButtonTypeCustom];\n [addButton setImage:kImage(@\"nav_btn_back.png\") forState:UIControlStateNormal];\n [addButton setTitle:@\"返回\" forState:UIControlStateNormal];\n [self.navigationView addLeftView:addButton clickCallback:^(UIView *view) {\n       [weakself.navigationController popViewControllerAnimated:YES];\n}];\n```\n\n#### 3,添加/移除一个左右两边视图\n\n添加/移除左右两边的视图后，都会重新布局两边的控件。\n```\n  //添加视图\n    UIView *leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 40, 40)];\n    [self.navigationView addLeftView:addButton clickCallback:^(UIView *view) {\n           NSLog(@\"click on leftView !\");\n    }];\n  \n  //移除视图 \n  [self.navigationView removeLeftView:self.navigationView.leftButton];\n```\n\n#### 4,添加一个view \n* view直接添加到导航栏上(不是两边控件)不会重新布局控件\n* 添加上view的frame不会受到导航条的约束。但是根据点击事件传递原理，它只会在导航条里面接受到事件。\n```\n  __block UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, -10, SCREEN_WIDTH-180, NAV_HEIGHT + 20)];\nview.backgroundColor = [UIColor purpleColor];\n[self.navigationView addSubview:view clickCallback:^(UIView *view) {\n    [view removeFromSuperview];\n}];\n```\n\n#### 5,添加/移除导航条\n\n* 删除操作会把当前的导航条彻底重内存中删除。如果在以后还会使用建议使用` self.navigationView.hidden = YES ;`隐藏导航条\n* 添加操作会重新创建一个新导航条，需要自己往上面添加子控件。\n```\n  if (self.navigationView) {\n      [self.navigationView removeFromSuperview];\n      self.navigationView = nil ;\n   }\n```\n```\nif (!self.navigationView) {\n     EasyNavigationView *nav = [[EasyNavigationView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH , NAV_HEIGHT)];\n     [self setNavigationView:nav];\n     [self.view addSubview:nav];\n }\n ```\n_【preview】_\n\n![image](https://github.com/chenliangloveyou/EasyNavigation/blob/master/nav_preview/operate.gif)\n\n\n\n## 透明度改变\n\n#### 1,设置导航条为透明背景\n  ```\n     [self.navigationView setNavigationBackgroundAlpha:0];\n     //当不想让导航条下面的细线变为透明\n     self.navigationView.lineView.alpha = 1 ;\n  ```\n  \n#### 2,导航条颜色渐变\n```\n//self.tableView 为支持导航条渐变的scrollview，\n//NAV_HEIGHT为开始渐变的位置，NAV_HEIGHT*4为结束渐变的位置。在其中间的移动会均匀变化\n[self.navigationView navigationAlphaSlowChangeWithScrollow:self.tableView];\n\n[self.navigationView navigationAlphaSlowChangeWithScrollow:self.tableView start:NAV_HEIGHT end:NAV_HEIGHT*4];\n```\n\n_【preview】_\n\n![image](https://github.com/chenliangloveyou/EasyNavigation/blob/master/nav_preview/alpha.gif)\n\n## 导航条隐藏 \n\n#### 1,无导航条\n  可以移除，或者隐藏导航条\n```\n#if 1//以下两个2选1\n    if (self.navigationView) {\n        [self.navigationView removeFromSuperview];\n        self.navigationView = nil ;\n    }\n#else\n    self.navigationView.hidden = YES ;\n#endif\n```\n\n\n#### 2,导航条随scrollview滚动而慢慢隐藏\n\n```\n//self.tableView 为支持导航条渐变的scrollview，\n//NAV_HEIGHT 为开始渐变self.tableView需要滚动的距离，也就是说，只有在self.tableView滚动NAV_HEIGHT后导航条才开始移动。\n//0.5 为导航条向上滚动的速度。（它的值为:导航条滚动距离/self.tableView滚动距离）\n//NO 为是否需要在statusBar下面停止。（statusBar颜色为导航条的背景）\n [self.navigationView navigationSmoothScroll:self.tableView start:NAV_HEIGHT speed:0.5 stopToStatusBar:NO];\n```\n\n#### 3,导航条在scrollview滚动某个位置时以`UIView`动画隐藏\n```\n//self.tableView 为支持导航条渐变的scrollview，\n//NAV_HEIGHT 为触发导航条隐藏的点。也就是当scrollview的contentOffset.y值操作这个数的时候，导航条就会隐藏\n//NO 为是否需要在statusBar下面停止。（statusBar颜色为导航条的背景）\n [self.navigationView navigationAnimationScroll:self.tableView criticalPoint:NAV_HEIGHT stopToStatusBar:NO];\n```\n\n【图片】\n![image](https://github.com/chenliangloveyou/EasyNavigation/blob/master/nav_preview/hidden.gif)\n\n\n## 导航条手势返回手势\n\n#### 1,系统返回手势\n\n```\n//是否禁止掉系统自带的侧滑返回手势，只会作用于当前控制器。无论在什么时候设置都。\n self.disableSlidingBackGesture = YES;\n```\n#### 2,自定义拖动屏幕手势返回\n\n    设置自定义手势，不要关闭系统自带的侧滑手势。\n    以下两个属性都可以随时变化\n```\n//是否开启 手势侧滑返回\n self.customBackGestureEnabel = YES ;\n //侧滑距离左边最大的距离,\n self.customBackGestureEdge = 100 ;\n```\n\n#### 3,嵌套scrollview返回\n\n_【preview】_\n\n![image](https://github.com/chenliangloveyou/EasyNavigation/blob/master/nav_preview/sliding.gif)\n\n\n## 状态栏改变\n\n默认状态栏为有状态栏，并且为黑色。每一次状态栏设置只会对当前控制器有效\n```\n//是否隐藏状态栏\n self.statusBarHidden = YES ;\n //设置当前状态栏的样式\n self.statusBarStyle =  UIStatusBarStyleDefault ; //UIStatusBarStyleLightContent \n```\n_【preview】_\n\n![image](https://github.com/chenliangloveyou/EasyNavigation/blob/master/nav_preview/statusBar.gif)\n\n\n \n# 注意事项\n```\n这个库的原理是隐藏系统提供的导航栏，在ViewController加到导航栏控制器的桟上时加上一个自定的view作为导航栏。\n加上的这个view用控制器的分类来保存。所以可以直接作为UIViewController的属性使用。\n```\n```\n对侧滑控制是对导航控制器的interactivePopGestureRecognizer属性的操作。自定义侧滑是偷偷换掉这个属性的触发条件。\n```\n```\n注意：由于是隐藏了系统导航栏。所以当控制器上第一个视图为scrollview的时候会向下偏移20。\n需要用self.automaticallyAdjustsScrollViewInsets = NO  或者 scrollview.contentInset = UIEdgeInsetsMake(NAV_HEIGHT, 0, 0, 0)来调整视图位置。 \n当控制器的第一个视图不是scrollview(或子类)的时候，需要让出导航栏高度的距离。\n```\n```\n注意：由于隐藏了系统导航条，只要是用EasyNavigationController为控制器的管理工具时\n系统提供的UINavigationBar 和 UINavigationItem 的属性就不能使用了。\n```\n\n# 联系作者\n- 若果在使用过程中发现问题，请[提issue](https://github.com/chenliangloveyou/EasyShowView/issues/new)。我会及时解决。\n- 紧急问题可以通过邮箱：chenliangloveyou@163.com  或微信联系我。\n- ![github](https://github.com/chenliangloveyou/EasyShowView/blob/master/show_preview/wechat_icon.png \"github\")\n- 喜欢，欢迎star~~~~\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchenliangloveyou%2FEasyNavigation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchenliangloveyou%2FEasyNavigation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchenliangloveyou%2FEasyNavigation/lists"}