web-dev-qa-db-fra.com

La couleur de l'image de l'élément du bouton de la barre de navigation est différente lors de la conception via xib de xcode5

Je crée un bouton de barre de navigation à l'aide de xib, mais lorsque je vais définir l'image sur le bouton de barre, la couleur de l'image est différente de l'image d'origine.

Voici mon image d'origine.

Here is my orignal image

Et après avoir ajouté cette image sur l'élément du bouton de la barre de navigation, cela ressemble à ceci

Aafter adding that image on navigation bar

28
Bug

Tout d'abord, je suis d'accord avec le commentaire de @ Desdenova.
Les deux images ne se ressemblent pas, l'une a des bords durs à angle droit pour chaque ligne et l'autre arrondie.
Assurez-vous que vous utilisez le bon fichier image.
Si tel est le cas, génial, problème résolu sans s'écarter de votre implémentation de xib. Sinon, faites-le simplement par programme (selon le code @shankars).
Mais une autre chose à noter, j'ai rencontré des problèmes pour définir des fichiers d'image personnalisés sur des boutons, où l'image est modifiée ... assurez-vous d'utiliser UIImageRenderingModeAlwaysOriginal lorsque vous définissez l'image sur le bouton :

Objectif-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)
70
Daniel McCarthy

Ceci est un exemple de code de travail

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

Parce que le storyboard ios7 a un problème que j'ai rencontré pour résoudre comme ci-dessous. définir votre couleur de teinte comme couleur d'image cela fonctionne

enter image description here

7
codercat

Vous pouvez créer un bouton de barre de navigation par programme au lieu d'un storyboard direct, cela n'affectera pas la couleur de l'image d'origine

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

J'espère que je ne suis pas trop tard pour ajouter ma propre réponse, mais dans Assets.xcassets, vous pouvez cliquer sur votre image et dans l'inspecteur d'attributs, sous Rendar As réglez-le sur Image originale

enter image description here

5
Max

Vous devez également définir la couleur de la teinte - ce qui a fonctionné pour moi - Vous pouvez générer UIBarButtonItem via le code comme suit:

#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