无需拉伸即可替换导航栏后退按钮

时间:2014-12-13 04:45:08

标签: ios uiimage uinavigationbar uibarbuttonitem uinavigationitem

我尝试更换默认导航栏后退按钮图片:

UIImage *backButtonImage = [UIImage imageNamed:@"back_button"] ;

backButtonImage = [backButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, backButtonImage.size.width, 0, 0)];

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage
                                                  forState:UIControlStateNormal
                                                barMetrics:UIBarMetricsDefault];

我得到的是: enter image description here

我想要的是: enter image description here

如何?原始图像为11x44点。

编辑:申请后,

[UINavigationBar appearance].backIndicatorImage = backButtonImage;
[UINavigationBar appearance].backIndicatorTransitionMaskImage = backButtonImage;

我明白了:enter image description here

我花了好几个小时试图让箭头向下移动,使其与导航栏中的标题文字垂直对齐,但无济于事。我已经看到其他线程遇到同样的问题,但没有解决方案。为什么这么难?似乎每个人都需要替换后退按钮图像。

2 个答案:

答案 0 :(得分:4)

试试这段代码:

UIImage *backBtnIcon = [UIImage imageNamed:@"backNavIcon.png"];

if (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)) {
    [UINavigationBar appearance].backIndicatorImage = backBtnIcon;
    [UINavigationBar appearance].backIndicatorTransitionMaskImage = backBtnIcon;
}
else{
UIImage *backButtonImage = [backBtnIcon resizableImageWithCapInsets:UIEdgeInsetsMake(0, backBtnIcon.size.width - 1, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -backButtonImage.size.height*2) forBarMetrics:UIBarMetricsDefault];
}

不要忘记将3张图片1x,@ 2x和@ 3x放入图片资源中。

请查看Apple文档中的UIElements以获取后退按钮。

谢谢!

答案 1 :(得分:1)

您可以使用基于@" back_button"的CGContextRef创建一个新的UIImage。图像,在其右侧绘制1点宽度的透明空间,以便您可以调用resizableImageWithCapInsets:UIEdgeInsetsMake(0, backButtonImage.size.width - 1, 0, 0)