生活iOS&Xcode奇技淫巧ios文章

1分钟解决iOS_backBarButtonItem问题

2015-04-27  本文已影响14378人  iHTCboy

1、序

正好在做毕业设计时,想到要设置全局的返回样式,只要图片,不要文字,形式如下:

最终效果图

2、思考过程

(1)开始时,我设置了如下:


UINavigationBar * navigationBar = [UINavigationBar appearance];

//返回按钮的箭头颜色

[navigationBar setTintColor:[UIColor whiteColor]];

//设置返回样式图片

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

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

navigationBar.backIndicatorImage = image;

navigationBar.backIndicatorTransitionMaskImage = image;

带有上一级导航标题

(2)讨论:全局下,箭头都是自定义样式了,但是文字怎么去掉?网上的方法很多,有用到时在设置,或全局的利用运行时重载方法,问题都是没有达到简单的方法,后来找到这样一个方法如下:


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

UIOffset offset;

offset.horizontal = -500;

[buttonItem setBackButtonTitlePositionAdjustment:offset forBarMetrics:UIBarMetricsDefault];

3、最后效果如下:

最后效果图

4、快速使用方法


- (void)setNaviBack{

UINavigationBar * navigationBar = [UINavigationBar appearance];

//返回按钮的箭头颜色

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

//设置返回样式图片

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、总结

在AppDelegate里集成上面代码,应用只要push后,不设置left按钮,默认都是统一的返回图片,快不快!而且保留了系统自带的左滑返回手势

6、Bug

感谢 @binMyth 、 @简书坤 提醒,bug:

因为没有去改变系统的backBarButtonItem,所以位置是没有变的。
在iPhone 5s上测试:

当然,在iPhone 6plus上宽度更大,具有没有测试,对于一般应用,标题不会太长,是可以接受吧。谢谢大家的指正!!如果大家有更好的方法,欢迎指教!

注:本文首发于 iHTCboy's blog,如若转载,请注明来源。

上一篇 下一篇

猜你喜欢

热点阅读