美文网首页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区别

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