1分鐘解決iOS_backBarButtonItem問題

1、序

  • iOS導(dǎo)航欄的返回按鈕,一直都是開發(fā)中比較頭痛的問題。

正好在做畢業(yè)設(shè)計時,想到要設(shè)置全局的返回樣式,只要圖片,不要文字,形式如下:

最終效果圖

2、思考過程

  • 網(wǎng)上有很多種方法,但是我都認為太麻煩,所以看能不能簡單的設(shè)置一個全局樣式

(1)開始時,我設(shè)置了如下:


UINavigationBar * navigationBar = [UINavigationBar appearance];

//返回按鈕的箭頭顏色

[navigationBar setTintColor:[UIColor whiteColor]];

//設(shè)置返回樣式圖片

UIImage *image = [UIImage imageNamed:@"navigationbar_back"];

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

navigationBar.backIndicatorImage = image;

navigationBar.backIndicatorTransitionMaskImage = image;

  • 以上代碼實現(xiàn)了全局的形式如下:
帶有上一級導(dǎo)航標題

(2)討論:全局下,箭頭都是自定義樣式了,但是文字怎么去掉?網(wǎng)上的方法很多,有用到時在設(shè)置,或全局的利用運行時重載方法,問題都是沒有達到簡單的方法,后來找到這樣一個方法如下:

  • 利用全局的UIBarButtonItem,然后巧妙的設(shè)置文字的偏移值,達到“隱藏”效果

UIBarButtonItem *buttonItem = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];

UIOffset offset;

offset.horizontal = -500;

[buttonItem setBackButtonTitlePositionAdjustment:offset forBarMetrics:UIBarMetricsDefault];

  • 不知道這個方法是不是最簡單,和這個方法是不有什么“bug”,能力有限,歡迎指點!

3、最后效果如下:

最后效果圖

4、快速使用方法


- (void)setNaviBack{

UINavigationBar * navigationBar = [UINavigationBar appearance];

//返回按鈕的箭頭顏色

[navigationBar setTintColor:[UIColor colorWithRed:0.984 green:0.000 blue:0.235 alpha:1.000]];

//設(shè)置返回樣式圖片

UIImage *image = [UIImage imageNamed:@"navi_back"];

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

navigationBar.backIndicatorImage = image;

navigationBar.backIndicatorTransitionMaskImage = image;

UIBarButtonItem *buttonItem = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];

UIOffset offset;

offset.horizontal = - 500;

offset.vertical =  - 500;

[buttonItem setBackButtonTitlePositionAdjustment:offset forBarMetrics:UIBarMetricsDefault];

}

5、總結(jié)

在AppDelegate里集成上面代碼,應(yīng)用只要push后,不設(shè)置left按鈕,默認都是統(tǒng)一的返回圖片,快不快!而且保留了系統(tǒng)自帶的左滑返回手勢

6、Bug

感謝 @binMyth 、 @簡書坤 提醒,bug:

  • 導(dǎo)航條上的返回按鈕 的 相應(yīng)區(qū)域 還是原來那么大 沒有變?yōu)閳D片的大小
  • 第一個界面的 title 過長 會影響 跳轉(zhuǎn)到的第二界面 的 title

因為沒有去改變系統(tǒng)的backBarButtonItem,所以位置是沒有變的。
在iPhone 5s上測試:

  • 如果上一級標題沒有超過6個中文,那么其實下一級時,返回標題會顯示完整,導(dǎo)致下一級標題右移了。
  • 如果上一級標題超過6個中文,系統(tǒng)會設(shè)置”返回“,位置相對較少,標題不會右移。

當然,在iPhone 6plus上寬度更大,具有沒有測試,對于一般應(yīng)用,標題不會太長,是可以接受吧。謝謝大家的指正!!如果大家有更好的方法,歡迎指教!

  • 如果有什么疑問,可以在評論區(qū)一起討論;
  • 如果有什么不正確的地方,歡迎指導(dǎo)!


注:本文首發(fā)于 iHTCboy's blog,如若轉(zhuǎn)載,請注明來源。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,523評論 0 17
  • 8月22日中午11:31--12:37 習慣的形成:行為發(fā)生,得到獎勵,強化。 人就是非理性的,人們都是根據(jù)自己過...
    立仁閱讀 1,975評論 0 1
  • 滿山開遍映山紅的時候,傳來了大李老師的死訊。 大李的父親是村子里一名很有名氣的老秀才,熟讀經(jīng)史、友愛相鄰。李老...
    山中木土閱讀 468評論 1 1