设置 UIBarButtonItem 的背景图像以编程方式更改其大小

Posted

技术标签:

【中文标题】设置 UIBarButtonItem 的背景图像以编程方式更改其大小【英文标题】:Set background image of UIBarButtonItem programmatically changes its size 【发布时间】:2013-07-22 13:43:28 【问题描述】:

我已经能够通过故事板拥有一个带有嵌入式 uibutton 的自定义 UIBarButtonItem。这是地图按钮。 查看此屏幕截图上的参数,我不得不使用背景属性而不是 Image。

但是当我尝试以编程方式自定义一些 uibarbuttons 时,按钮会变小。当我使用 Image 属性时,我使用地图按钮得到了相同的结果。

这是我为后退按钮编写的代码,

UIImage *backButtonImage = [[UIImage imageNamed:@"Retour.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(21, 21, 21, 21)] ;
backButtonImage = [backButtonImage stretchableImageWithLeftCapWidth:0 topCapHeight:0];

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
 button.frame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
[button setBackgroundImage:backButtonImage forState:UIControlStateNormal];
[button setBackgroundImage:backButtonImage forState:UIControlStateHighlighted];

[button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithCustomView:button] ;
self.navigationItem.leftBarButtonItem = backBarButton;

我尝试使用或不使用 resizableImageWithCapInsets、stretchableImageWithLeftCapWidth,结果相同(后退按钮的大小应与地图按钮的大小相同)

我也尝试了 ios 5 setBackButtonBackgroundImage 方法,但按钮根本没有自定义。

【问题讨论】:

【参考方案1】:

如果您没有找到问题的答案,我可以建议您使用此功能:

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize

    //UIGraphicsBeginImageContext(newSize);
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;

它返回一个缩放到指定大小的图像。

因此您可以将图像调整为所需大小,然后将其设置为背景图像。

【讨论】:

【参考方案2】:

问题是我用 Retour.png -__-'

覆盖了 Retour@2x.png 用于视网膜显示

【讨论】:

以上是关于设置 UIBarButtonItem 的背景图像以编程方式更改其大小的主要内容,如果未能解决你的问题,请参考以下文章

自定义“按下” UIBarButtonItem 背景

UIBarButtonItem 的默认后退按钮背景图像出现在我的自定义

如何以编程方式将自定义图像设置为 UIBarButtonItem

工具栏中的 UIBarButtonItem 可以在 iOS 7 中具有背景图像吗?

UIBarButtonItem 带有图像和文本以及边框?

UiBarButtonItem 背景图像直到第一次点击才显示