美文网首页UI 界面
backBarItem和 leftBarItem区别

backBarItem和 leftBarItem区别

作者: 为什么划船不靠桨 | 来源:发表于2017-06-22 09:36 被阅读26次

其实很早之前就已经有这个疑问了,最近正好有空就正式的实践了一下,看了看这两者之间究竟有身上区别.那么关于系统的导航条里backBarItem和leftBarItem有什么区别,我先贴出一个图看一下效果就知道了

我相信通过图片这个大家能够很明显的看出区别:当自定义leftBackItem的时候,手势返回的过程中,左上角的文字是渐暗的。而当自定义backBarItem的时候,返回按钮的标题会慢慢远离返回按钮,然后再pop。
还有一个需要注意的是这两者在代码的写法上也是有区别的:当自定义leftBarItem的时候,假如 A要 push B,那么自定义过程的代码其实是写在B控制器里面的;当在自定义backBarItem,代码其实是写在A控制器里面的

具体代码如下

leftBarItem:在 B 控制器中实现如下代码
UIButton *lefuButton = [UIButton buttonWithType:UIButtonTypeCustom];
  lefuButton.titleLabel.font = [UIFont systemFontOfSize:17];
  [lefuButton setImage:[UIImage imageNamed:@"nav_back"] forState:UIControlStateNormal];
  [lefuButton setImage:[UIImage imageNamed:@"nav_back"] forState:UIControlStateHighlighted];
  [lefuButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  [lefuButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
  [lefuButton setImageEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 0)];
  [lefuButton setTitle:@"leftBarItem" forState:UIControlStateNormal] ;
  [lefuButton sizeToFit];
  [lefuButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];

  UIBarButtonItem *leftButtonItem = [[UIBarButtonItem alloc] initWithCustomView:lefuButton];

  self.navigationItem.leftBarButtonItem = leftButtonItem;
backBarItem:在 A控制器中实现如下代码
UIBarButtonItem *backItem = [[UIBarButtonItem alloc]init];
  backItem.title = @"backBarItem";
//如果使用了自己的返回图片, 需要适当调整文字和图片的距离
  [backItem setBackButtonTitlePositionAdjustment:UIOffsetMake(8, 0) forBarMetrics:UIBarMetricsDefault];
  [self.navigationController.navigationBar setTintColor:[UIColor blackColor]];
  self.navigationItem.backBarButtonItem = backItem;
如果仅仅在 A 控制器中覆盖 backBarButtonItem 的话,那 B 控制器中的返回图片还是系统的, 如果想要替换成自己的返回图片,就要在导航控制器中添加如下代码,替换系统的backIndicatorImage
UIImage *backImg = [UIImage imageNamed:@"nav_back"];
    backImg = [backImg imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.navigationBar.backIndicatorImage = backImg;
    self.navigationBar.backIndicatorTransitionMaskImage = backImg;
这里,还有一个点需要大家注意一下,那就是当我们自定义了leftBarButtonItem的时候,系统的侧滑返回手势会失效,所以就需要我们遵守UIGestureRecognizerDelegate,并写下如下代码
self.navigationController.interactivePopGestureRecognizer.delegate = self;
有的时候我们不想再显示返回按钮的时候可以这么写
self.navigationItem.hidesBackButton = YES;
但是注意这样依旧会使侧滑返回失效,用上面的解决办法依旧可以解决此问题.

相关文章

  • backBarItem和 leftBarItem区别

    其实很早之前就已经有这个疑问了,最近正好有空就正式的实践了一下,看了看这两者之间究竟有身上区别.那么关于系统的导航...

  • 迷人的 iOS导航条

    一、backBarItem和 leftBarItem 傻傻分不清楚 关于系统的导航条里backBarItem和le...

  • iOS滑动返回手势失效解决方案

    简介 在项目中经常碰到包括自定义backBarItem和隐藏navigationbar导致返回手势失效的问题,这里...

  • iOS导航按钮响应范围扩大问题

    我们直接在leftBarItem添加一个自定义button的时候,这个button的有效点击范围将会很大,接近na...

  • <%= %>和${ }区别

    <%= %>只能得到当前面定义的值,<%=表达式%>是输出表达式的, <% %>表示里面写的是普通的JAVA代码....

  • $* 和$@区别

    1 概述 $* 和$@在有加双引号和没有双引号的情况下有明显的区别,在这边用一个实验进行测试 实验的环境如下 为了...

  • for of和for in区别

    for...in 以任意顺序遍历一个对象自有的、继承的、可枚举的、非Symbol的属性。对于每个不同的属性,语句都...

  • =和:=区别

    go语言中 = 是赋值,而 := 是声明变量并赋值

  • * 和 & 区别

    * 和 & 区别 注意!!! 上述代码中的 a 本身就是个 地址 。 上述代码中的 *a 代表的是存储在内存 地址...

  • &和&&区别

    &和&&都是逻辑“与”运算符。即运算符两边表达式结果都为true,运算结果才成立。只要有有一方为false,则结果...

网友评论

    本文标题:backBarItem和 leftBarItem区别

    本文链接:https://www.haomeiwen.com/subject/drvxcxtx.html