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)載,請注明來源。