1

我正在使用外观代理来设置导航栏中后退按钮的背景图像。

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:[[UIImage imageNamed:@"arrow-back-button"] resizableImageWithCapInsets:UIEdgeInsetsMake(0., 9., 0., 0.)]
                                                  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

这适用于 iOS 6,看起来绝对完美。然而,在 iOS 5 中,背景图像开始重复,几乎就像按钮变高了一样。

iOS 5:

iOS 5 版本

iOS 6:

iOS 6 版本

使用的图像(带有彩色背景以突出显示大小)。

后退按钮图像

谁能帮我让 iOS 5 中的后退按钮看起来正确吗?

编辑:

这是我不使用的结果resizableImageWithCapInsets:

iOS 5 没有 resizableImage

4

3 回答 3

1

如果您将图像与 Retina 显示器一起使用,则使用@2x:对图像进行后缀"arrow-back-button@2x"

尝试创建一个类别UIImage并添加此实例方法:

 (UIImage*)resizableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:            (NSInteger)topCapHeight </b>{
UIImage *image = nil;    
float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (osVersion < 6.0) {
    image = [self stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:topCapHeight];
} else {
    UIEdgeInsets edgeInsets = UIEdgeInsetsMake(topCapHeight, leftCapWidth, topCapHeight, leftCapWidth);
    image = [self resizableImageWithCapInsets:edgeInsets];
}
return image;
 }

我怀疑在 iOS6 中已经修复了一个 iOS 5 错误

于 2013-07-11T08:30:30.863 回答
1

您遇到的平铺行为对于 iOS 5.x 是正常的。这是它知道如何调整图像大小的唯一行为。我不知道为什么它似乎在 5.x 中调整大小但在 6.x 中没有,但在 iOS 5.x 中修复此行为的唯一方法是制作与您的背景大小相同的 PNG UIBarButtonItem(使用 alpha 填充)并将其设置为不可调整大小的背景图像。

于 2013-07-11T09:11:04.873 回答
1

您需要将背景图像更改为 30 像素高(视网膜版本为 60 像素)。只需在顶部和底部添加一些透明像素,使箭头保持垂直居中。

iOS 5 强制最小高度为 30pt,如果图像更小,则会调整图像大小。

于 2013-07-11T09:11:50.870 回答