UI 界面

backBarItem和 leftBarItem区别

2017-06-22  本文已影响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;
但是注意这样依旧会使侧滑返回失效,用上面的解决办法依旧可以解决此问题.
上一篇下一篇

猜你喜欢

热点阅读