当使用XCODE 5的xib设计时,导航栏按钮项图像颜色会有所不同。

34
我正在使用xib创建一个导航栏按钮,但是当我将图像设置为该按钮时,图像的颜色与原始图像不同。
这是我的原始图像。

Here is my orignal image

在将该图像添加到导航栏按钮项后,它看起来像这样

Aafter adding that image on navigation bar


1
你有检查该元素的色调和透明度吗? - Prabhu Natarajan
@PrabhuNatarajan 当我通过xib添加按钮时,只有默认的色调颜色选项,请建议我是否需要更改。 - Bug
@iMove 尝试以编程方式添加按钮!http://textdump.net/read/3972/ - SDW
5
您的两张图片不同,请确保使用正确的图片。 - Desdenova
最好您可以尝试以编程方式添加。 - shankar
显示剩余5条评论
6个回答

81

首先,我同意@Desdenova的评论。
这两个图像看起来不一样,一个有每条线的硬直角边缘,而另一个则是圆形的。
确保您使用正确的图像文件。
如果是这种情况,太好了,问题可以在不偏离您的xib实现的情况下解决。如果不是,请按照@shankars的代码进行编程解决。
但需要注意的另一件事是,我曾经遇到过将自定义图像文件设置为按钮时出现问题的情况,其中图像被修改...请确保在将图像设置为按钮时使用UIImageRenderingModeAlwaysOriginal

Objective-C:

[button setImage:[[UIImage imageNamed:@"imageName.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];

Swift:

someBarButtonItem.image = UIImage(named: "yourPictureName")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

Swift 3:

someBarButtonItem.image = UIImage(named:"myImage")?.withRenderingMode(.alwaysOriginal)

非常感谢你们两个。我有一个重复的图像,一个名为menu,另一个是menu@2x。当我删除第二个时,它对我有用。 - Bug
@Daniel McCarthy。完美的答案...太棒了。 - Jagat Dave

14

这是一个工作代码示例

UIImage *myImage = [UIImage imageNamed:@"myImageFile.png"];
myImage = [myImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *menuButton = [[UIBarButtonItem alloc] initWithImage:myImage style:UIBarButtonItemStylePlain target:self action:@selector(menuObject:)];
self.navigationItem.leftBarButtonItem = menuButton;

11
希望我来得不算太晚,关于Assets.xcassets的问题,您可以点击选择您的图片,在属性检查器中找到渲染为,将其设置为原始图像即可。

在此输入图片描述


谢谢Max的回答。这是最正确的答案。我将我的资产中的“渲染为”更改为原始状态,它按预期工作,而且没有任何代码。再次感谢。这就是正确的答案 :) - Davit Siradeghyan

8
由于iOS7中的Storyboard存在问题,我需要解决以下问题。将你的色调颜色设置为图像颜色即可解决问题。

enter image description here


谢谢,我之前尝试过那个方法,但它并不是我的解决方案。我通过删除重复的图像来解决我的问题。 - Bug
这是最佳解决方案,因为它不需要编写任何代码。 - Aleksey Shevchenko

7
您可以通过编程创建导航栏按钮,而不是直接使用故事板,这样不会影响原始图像的颜色。
self.navigationItem.leftBarButtonItem=[self backButton];

- (UIBarButtonItem *)backButton
{
   UIImage *image = [UIImage imageNamed:@"image.png"];
   CGRect buttonFrame = CGRectMake(0, 0, image.size.width, image.size.height);

   UIButton *button = [[UIButton alloc] initWithFrame:buttonFrame];
   //[button addTarget:self action:@selector(backButtonPressed) forControlEvents:UIControlEventTouchUpInside];
   [button setImage:image forState:UIControlStateNormal];

   UIBarButtonItem *item= [[UIBarButtonItem alloc] initWithCustomView:button];

   return item;
}

6
您需要设置色调颜色,这对我很有用。您可以通过以下代码生成UIBarButtonItem:
#define setTurqoiseColor [UIColor colorWithRed:68.0f/255.0f green:181.0f/255.0f blue:223.0f/255.0f alpha:1.0]

UIBarButtonItem *menuButton = [[UIBarButtonItem alloc] initWithImage:buttonImage style:UIBarButtonItemStyleBordered target:self action:@selector(toggleMenu)];
menuButton.tintColor = setTurqoiseColor;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接