web-dev-qa-db-ja.com

xcode5のxibを使用して設計すると、ナビゲーションバーのボタンアイテムの画像の色が異なる

Xibを使用してナビゲーションバーボタンを作成していますが、画像をバーボタンに設定すると、画像の色が元の画像と異なります。

これが私の元の画像です。

Here is my orignal image

そして、ナビゲーションバーのボタンアイテムにその画像を追加すると、次のようになります

Aafter adding that image on navigation bar

28
Bug

まず、@ Desdenovaのコメントに同意します。
2つの画像は同じように見えず、1つは各ラインにハード直角エッジを持ち、もう1つは丸みを帯びています。
正しい画像ファイルを使用していることを確認してください。
これが当てはまる場合、xib実装から逸脱することなく、驚くべき問題が解決されています。そうでない場合は、プログラムで実行してください(@shankarsコードに従って)。
しかし、注意すべきもう1つのことは、ボタンにカスタム画像ファイルを設定する際に問題が発生したことです。ボタンに画像を設定するときは、必ずUIImageRenderingModeAlwaysOriginalを使用してください。

目的C:

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

スイフト:

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

Swift 3:

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

これはサンプル作業コードです

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;
12

Ios7ストーリーボードには以下のような修正が必要な問題があるためです。色合いの色を画像の色として設定します

enter image description here

7
codercat

ダイレクトストーリーボードの代わりにプログラムでナビゲーションバーボタンを作成できます。これは元の画像の色には影響しません

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;
}
7
shankar

自分の答えを追加するのに手遅れではないことを願っていますが、Assets.xcassets内で、画像をクリックし、属性インスペクターのRendar AsOriginal Imageに設定します

enter image description here

5
Max

色合いも設定する必要があります-私にとってはうまくいきました-次のようにコードを介して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;
4
bhavya kothari