我们已经使用storyboard添加了UIBarButtonItem
,并且在运行时点击我们想要更改其图像(功能类似于添加书签/删除书签)。
对堆栈溢出进行了研究..许多人建议在UIButton
内使用UIBarbuttonItem
。
下面的代码会更改图像,但图像会被拉伸(甚至原始图像也会显示为拉伸。
任何人都可以使用UIBarButton
(不使用UIButton
)指导我们更改图片吗?
[_barButtonAddToFav setBackgroundImage:[UIImage imageNamed:@"ic_add_to_fav.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
答案 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];