Ios 在不拉伸的情况下更换导航栏“后退”按钮

Ios 在不拉伸的情况下更换导航栏“后退”按钮,ios,uiimage,uinavigationbar,uibarbuttonitem,uinavigationitem,Ios,Uiimage,Uinavigationbar,Uibarbuttonitem,Uinavigationitem,我正在尝试替换默认导航栏后退按钮图像: UIImage *backButtonImage = [UIImage imageNamed:@"back_button"] ; backButtonImage = [backButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, backButtonImage.size.width, 0, 0)]; [[UIBarButtonItem appearance] setBackButtonB

我正在尝试替换默认导航栏后退按钮图像:

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

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

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage
                                                  forState:UIControlStateNormal
                                                barMetrics:UIBarMetricsDefault];
我得到的是:

我想要的是:

怎么做?原始图像为11x44点

编辑:应用此选项后

[UINavigationBar appearance].backIndicatorImage = backButtonImage;
[UINavigationBar appearance].backIndicatorTransitionMaskImage = backButtonImage;
我明白了:

我花了几个小时试图让箭头向下移动,使其与导航栏中的标题文本垂直对齐,但没有效果。我见过其他线程有同样的问题,但没有解决方案。为什么这会如此困难?似乎每个替换后退按钮图像的人都必须处理这个问题。

试试下面的代码:

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以查看后退按钮


谢谢

您可以使用CGContextRef在@“back_按钮”图像的基础上创建一个新的UIImage,在其右侧绘制一个1点宽的透明空间,这样您就可以调用
ResizebleimageWithCapinsets:UIEdgeInsetsMake(0,backButtonImage.size.width-1,0,0)

当然,您必须将图像设置为1x、2x、3X。2x图像是22x88。背_button@2x.pngInteresting. 我从来没有听说过背指示符号法师。这几乎可以工作,但后退按钮在64像素导航栏中垂直居中。由于状态栏占据顶部20px,我需要图像垂直居中于导航栏下部44px。有什么方法可以做到这一点,或者我必须以64像素的高度保存图像吗?@soleil尝试在大小可调的图像中使用capinsets进行一些更改,我想你可以做到。我也从来没有听说过
backindicationmage
。谢谢分享。@AshishKakkad使用大小可调的带capinsets的图像会破坏Backindicator图像的全部用途,对吗?我只需要支持iOS 7+。请参阅我对原始问题的编辑。