iphone UIBarButtonItem:setBackgroundImage - Stretched

时间:2014-02-21 11:57:09

标签: ios uibarbuttonitem

我们已经使用storyboard添加了UIBarButtonItem,并且在运行时点击我们想要更改其图像(功能类似于添加书签/删除书签)。

对堆栈溢出进行了研究..许多人建议在UIButton内使用UIBarbuttonItem

下面的代码会更改图像,但图像会被拉伸(甚至原始图像也会显示为拉伸。

任何人都可以使用UIBarButton(不使用UIButton)指导我们更改图片吗?

 [_barButtonAddToFav setBackgroundImage:[UIImage imageNamed:@"ic_add_to_fav.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

5 个答案:

答案 0 :(得分:4)

UIBarButtonItem会将整个图像拉伸到其按钮区域。

要解决此问题,请在UIButButtonItem中拖动UIButton并在UIButton上设置图像。

将UIButton类型设置为自定义,并将所有属性设置为要为BarButton设置。

它不会被拉伸,你也可以设置与图像相同的宽度/高度分辨率。

希望得到它的帮助。如果我们必须采用其他解决方案,请告诉我。

答案 1 :(得分:2)

我最近在努力解决这个问题,所有的解决方案看起来都很复杂但事实证明这只是有效的(至少如果在故事板上分配的原始图像与新图像的尺寸相同 - 不确定如果它们不同的话):

barButton.image = (UIImage(named: "NewImage"))

答案 2 :(得分:1)

不要使用:用于UIBarButtonItem的setBackgroundImage,而是使用以下语法初始化使用Image

初始化它

这将只创建带图像的按钮,它永远不会拉伸。

X

答案 3 :(得分:0)

Amod你可以尝试这种编码。无论如何它会帮助你。

UIImage *buttonImg = [UIImage imageNamed:@"myImg.png"];
UIImage *buttonGreyImg = [buttonImg stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[myButton setBackgroundImage:buttonGreyImg forState:UIControlStateNormal];

答案 4 :(得分:0)

您的问题的另一个代码(ANSWER)

 // Change the appearance of back button
     UIImage *backButtonImage = [[UIImage imageNamed:@"button_back"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 6)];
     [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

 // Change the appearance of other navigation button
     UIImage *barButtonImage = [[UIImage imageNamed:@"button_normal"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)];
     [[UIBarButtonItem appearance] setBackgroundImage:barButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];