我正在尝试自定义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”在土耳其语中意为“后退”):
我不明白的是最后的尺寸差异。我不确定我做错了什么。关于这个的任何想法?
感谢。
答案 0 :(得分:11)
您的UIEdgeInsets
对于您正在使用的图片不正确,您告诉用户界面过早开始拉伸图片。您应该更改UIEdgeInsets
的左侧值以开始向右伸展几个点。
我注意到你评论了另一个答案,你不明白边缘插入是如何工作的。所以我为你画了这个。
黑线代表图像的边框。橙色线代表您希望图像可伸展的区域。请注意,当按钮的圆角部分结束时,左帽会出现。右上角出现在右边缘的圆角之前。
您可以使用UIEdgeInsets
将此表示给UIKit。
UIEdgeInsets
定义如下(see documentation):
typedef struct {
CGFloat top, left, bottom, right;
} UIEdgeInsets;
在你的情况下我下载了你想要使用的按钮,我发现左边的帽子应该从14像素开始。右上角应为18像素(距右边缘5个像素)。
因此,您应该使用以下边缘插图来正确调整图像大小:
UIEdgeInsets correctInsets = UIEdgeInsetsMake(0.0, 14.0, 0.0, 5.0);
另请注意,您使用的UIImage
调整大小的方法仅适用于iOS 6:
-resizableImageWithCapInsets:resizingMode:
您应该使用此方法来使其在iOS 5中正常工作:
-resizableImageWithCapInsets:
答案 1 :(得分: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];