### 导航栏NavigationBar的常见问题

[TOC]

目录

自定义导航栏按钮

- (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view.
  UIButton * leftBtn = [UIButton buttonWithType:UIButtonTypeSystem];leftBtn.frame = CGRectMake(0, 0, 25,25);
  [leftBtn setBackgroundImage:[UIImage imageNamed:@"nav_back"] forState:UIControlStateNormal];
  [leftBtn addTarget:self action:@selector(leftBarBtnClicked:) forControlEvents:UIControlEventTouchUpInside];
  self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:leftBtn];
}

- (void)leftBarBtnClicked:(UIButton *)btn{ 
  [self.navigationController popViewControllerAnimated:YES];
}

调整导航栏按钮位置

//创建返回按钮
UIButton * leftBtn = [UIButton buttonWithType:UIButtonTypeSystem];
leftBtn.frame = CGRectMake(0, 0, 25,25);
[leftBtn setBackgroundImage:[UIImage imageNamed:@"icon_back"] forState:UIControlStateNormal];[leftBtn addTarget:self action:@selector(leftBarBtnClicked:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem * leftBarBtn = [[UIBarButtonItem alloc]initWithCustomView:leftBtn];
//创建UIBarButtonSystemItemFixedSpace
UIBarButtonItem * spaceItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
//将宽度设为负值
spaceItem.width = -15;
//将两个BarButtonItem都返回给NavigationItem
self.navigationItem.leftBarButtonItems = @[spaceItem,leftBarBtn];

自定义返回按钮后滑动返回手势失效

<UIGestureRecognizerDelegate>
self.navigationController.interactivePopGestureRecognizer.delegate = self;

全屏滑动返回手势

<UIGestureRecognizerDelegate>
- (void)viewDidLoad{
  [super viewDidLoad];
  // 获取系统自带滑动手势的target对象
  id target = self.interactivePopGestureRecognizer.delegate;
  // 创建全屏滑动手势,调用系统自带滑动手势的target的action方法
  // handleNavigationTransition系统滑动方法 不会因为私有API被拒
  UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
  // 设置手势代理,拦截手势触发
  pan.delegate = self;
  // 给导航控制器的view添加全屏滑动手势
  [self.view addGestureRecognizer:pan];
  // 禁止使用系统自带的滑动手势
  self.interactivePopGestureRecognizer.enabled = NO;
}

导航栏NavigationBar切换动画

1. FDFullscreenPopGesture

FDFullscreenPopGesture简单粗暴好用

2.KLTAnimateNav

KLTAnimateNav写的不错,内容比较简单有学习价值

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

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,267评论 4 61
  • 更新:最后提供的所谓“终极”解决方案,之前都是自己的项目在用,分享出来之后,发现有一些地方还需要改进。但是总体思路...
    _奔跑的炸鸡阅读 40,170评论 124 658
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,925评论 25 709
  • 一、先举两个例子,我已经改掉了的旧习惯。 1,丢三漏四。 做一件事总会少了什么,出门忘带钥匙去上学,把作业落在家里...
    周建雄key阅读 217评论 0 1
  • 在布迪卡帝国的繁华大街上,热闹无比,小贩大声吆喝着向走过的人们推荐着自己的商品,街边的一伙人正表演杂技,时不时...
    晨曦微露潇筱竹阅读 288评论 0 0