backBarItem和 leftBarItem區別

其實很早之前就已經有這個疑問了,最近正好有空就正式的實踐了一下,看了看這兩者之間究竟有身上區別.那么關于系統的導航條里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;
但是注意這樣依舊會使側滑返回失效,用上面的解決辦法依舊可以解決此問題.
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,287評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 月薪三萬撐不起孩子的暑假 最近在網上傳的沸沸揚揚、一篇名為《月薪3萬,還撐不起孩子的一個暑假》的文章在朋友圈里面爆...
    紅拂夜奔去閱讀 440評論 0 2
  • “你要記得那些大雨中為你撐傘的人 幫你擋住外來之物的人 黑暗中默默抱緊你的人 逗你笑的人 陪你徹夜聊天的人 陪你哭...
    舊城夏至閱讀 264評論 0 0
  • 處此紛世,塵囂厭人,雞飛狗跳,應守住自己一方心境。無所謂失,無所謂得,我自安足便好!累了那就歇了。歸去,也無風雨也...
    孤磊曉月閱讀 137評論 0 0