2

我正在尝试自定义 iOS 5 中的后退按钮。这是我要使用的背景图像:

背景图片

它是 23 x 30 点。

我要自定义的代码是:

UIImage *buttonBackground = [[UIImage imageNamed:@"navbar-backbutton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 11, 0, 11) resizingMode:UIImageResizingModeStretch]; 
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Geri" style:UIBarButtonItemStylePlain target:nil action:nil];
[backButton setBackButtonBackgroundImage:buttonBackground forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[self.navigationItem setBackBarButtonItem:backButton];

这应该可以解决问题,图像的宽度为 23 点,我将左右偏移设置为 11 点。但这就是结果(“Geri”在土耳其语中的意思是“返回”):

返回键

我不明白的是最后的大小差异。我不确定我做错了什么。关于这个有什么想法吗?

谢谢。

4

2 回答 2

11

你的代码有什么问题?

UIEdgeInsets使用的图像不正确,您是在告诉 UI 过早地开始拉伸图像。您应该更改 left 的值UIEdgeInsets以开始向右拉伸几个点。

什么是边缘插图?

我注意到您评论了另一个您不了解边缘插图如何工作的答案。所以我为你画了这个。

在此处输入图像描述

黑线代表图像的边界。橙色线代表您希望图像可拉伸的区域。请注意,当按钮的圆形部分结束时,会出现左帽。右帽出现在右边缘的圆角之前。

您可以使用UIEdgeInsets.

UIEdgeInsets定义如下(见文档):

typedef struct {
    CGFloat top, left, bottom, right;
} UIEdgeInsets;

解决方案

在您的情况下,我下载了您尝试使用的按钮,我发现左帽应该从 14 像素开始。右帽应为 18 像素(距右边缘 5 像素)。

因此,您应该使用以下边缘插图来正确调整图像大小:

UIEdgeInsets correctInsets = UIEdgeInsetsMake(0.0, 14.0, 0.0, 5.0);

兼容性(iOS 5 和 6)

另请注意,UIImage您使用的调整大小方法仅适用于 iOS 6:

-resizableImageWithCapInsets:resizingMode:

你应该使用这个方法来让它在 iOS 5 中正常工作:

-resizableImageWithCapInsets:

参见UIImage 文档

于 2013-05-14T19:49:19.483 回答
1

试试这个代码

 NSString *ver = [[UIDevice currentDevice] systemVersion];
    IosVersion = [ver floatValue];

    UIButton * backButton ;
    backButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 23, 19)];
    if(IosVersion >= 5.0)

        [backButton setBackgroundImage:[[UIImage imageNamed:@"navbar-backbutton"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0f, 15.0f, 0.0f, 15.0f)]forState:UIControlStateNormal];

    else

        [backButton setBackgroundImage:[[UIImage imageNamed:@"navbar-backbutton"]stretchableImageWithLeftCapWidth:15 topCapHeight:15]forState:UIControlStateNormal];


    [backButton.titleLabel setText:@"Geri"];
    [backButton setFrame: CGRectMake(0, 0, 23, 19)];

    [backButton addTarget:self action:@selector(goToHome) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *HomeButton = [[UIBarButtonItem alloc] initWithCustomView: backButton];
    [self.navigationItem setLeftBarButtonItem:HomeButton];
于 2012-09-14T13:37:31.197 回答