Question

Sur ma barre de navigation, j'ai quelques barbuttonitems de droite qui ont des icônes personnalisées (les images d'icônes sont blanches, qui ont bien fonctionné avec la palette de couleurs de base d'iOS 6).

Sous iOS 7, le chargement des images en utilisant InitWithTitle (voir Code Snippet 1) remplace la couleur "blanc" dans l'icône avec la teinte globale appropriée (une couleur spécifique du bleu foncé dans ce cas)

Extrait de code 1:

UIBarButtonItem *refreshButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:(UIBarButtonItemStyle) UIBarButtonSystemItemCancel target:(self) action:@selector(refreshList)];

refreshButton.image = [UIImage imageNamed:@"RefreshIcon.png"];

Cependant, je devais utiliser initwithcustomView pour surmonter un changement de comportement étrange qui faisait que les icônes se déplacent hors de vue. L'idée de base était de définir spécifiquement la taille des icônes. IniTWithCustomView a résolu le problème de dimensionnement, mais n'affiche pas les images du bouton avec la teinte globale, elles sont affichées dans la couleur de l'image (blanc). Code Snippet 2 montre comment je crée le bouton avec initwithcustomview.

Extrait de code 2:

CGRect frameCustomButton2 = CGRectMake(0.0, 0.0, 18.0, 18.0);
UIButton *customButton2 = [[UIButton alloc] initWithFrame:frameCustomButton2];
[customButton2 setBackgroundImage:iconRefreshButton forState:UIControlStateNormal];
UIBarButtonItem *barCustomButton2 =[[UIBarButtonItem alloc] initWithCustomView:customButton2 ];
barCustomButton2.image = iconRefreshButton;
[customButton2 addTarget:self action:@selector(refreshList) forControlEvents:UIControlEventTouchUpInside];

Tout ce code est bien sûr dans (void) ViewDidload. J'ai essayé des choses comme:

barCustomButton2.tintColor = [UIColor blackColor];  //doesn't work

ou [BarbuttonPearance SettrintColor: [UICOLOR BlackColor]]; // ne fonctionne pas

Et ils ne remplacent pas la couleur blanche de l'image. C'est presque comme si la création de la vue personnalisée avait lieu après que la vue examinait la couleur globale de la teinte?

Comment puis-je m'assurer que l'icône de bouton prend la teinte globale?

Merci!

Était-ce utile?

La solution

Je voulais juste mettre cela dans un commentaire profonde pour donner un meilleur contexte à la vérification "Réponse" et donner un meilleur formatage.

J'ai pu comprendre celui-ci! Vous pouvez dire à l'image de toujours rendu comme modèle, ce qui le forcera à prendre la couleur globale de la teinte.

UIImage *iconRefreshButton = [UIImage imageNamed:@"MyIconFilename.png"];
iconRefreshButton = [iconRefreshButton imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

La valeur par défaut, si vous ne le définissez pas, est "uiImageRenderingModeAutomatic", ce qui signifie qu'il rendra comme modèle ou image d'origine basée sur le contexte.

Autres conseils

Vous devrez soit contourner le problème que vous aviez avec le premier extrait de code, ou vous devrez créer une sous-classe UIButton qui utilise son image comme masque pour montrer la couleur de la teinte dans drawRect:.

Je recommanderais la première approche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top