web-dev-qa-db-de.com

UIBarButtonItem mit UIImage Always Tinted iOS 7

Ich versuche, eine UIBarButtonItem, die eine UIImage enthält, zu einer UIToolbar hinzuzufügen. Das Bild wird immer wieder eingefärbt und ich kann es nicht als farbiges Originalbild anzeigen lassen - ich möchte nur ein Bild wörtlich in einer UIBarButtonItem anzeigen! Ich befolge die Anweisungen in der Übergangsanleitung für iOS 7, um den Bildwiedergabemodus auf UIImageRenderingModeAlwaysOriginal einzustellen.

UIImage *image = [UIImage imageNamed:@"myImage.png"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

UIBarButtonItem *ratingImage = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target:nil action:nil];

[toolbar setItems:[NSArray arrayWithObjects:ratingImage, nil] animated:YES];

Zu beachten ist, dass ich die tintColor für das Haupt-UIWindow meiner App richtig eingestellt habe, wenn sie geladen wird ... Vielleicht ist dies in Bezug auf mein Problem nicht wichtig, aber ich dachte, ich würde es erwähnen.

62
DiscDev

Ich verbrachte einen Abend damit, das herauszufinden. Sie waren der Lösung sehr nahe ... Der Trick besteht darin, den UIImage mit dem Rendermodus zu instantiieren.

Statt zu tun:

 UIImage *image = [UIImage imageNamed:@"myImage.png"];
 image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

mach das:

 UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

und es funktioniert!

In meinem Fall hatte ich eine Navigationsleiste zu meinem Viewcontroller in der IB gezogen und das BarButtonItem hinzugefügt. Geben Sie dem Artikel jedoch kein Bild in der IB. Machen Sie ein Outlet und weisen Sie ihm den UIImage (wie oben beschrieben) zu, indem Sie Folgendes tun:

[myCustomBarButtonItem setImage:image];

Hoffe, das funktioniert für dich.

171
ScorpionKing2k5

UIImageRenderingModeAlwaysOriginal kann auch festgelegt werden, indem Sie das Bild im Ordner "Assets.xcassets" in XCode auswählen und die Dropdown-Liste "Rendern als" auf "Originalbild" setzen.

10
andlin

Für Swift 2.1+ würde es so aussehen:

let image : UIImage? = UIImage(named:"myImage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

AKTUALISIERT Swift 3

let image : UIImage? = UIImage(named:"myImage.png")!.withRenderingMode(.alwaysOriginal)
9
jesses.co.tt

Die akzeptierte Antwort ist in Ordnung, aber wenn Sie die UIBarButtonItem in ein Storyboard oder ein Xib gestellt haben, können Sie einfach:

  • Wechseln Sie zum Assets-Katalog, in dem sich das Bild befindet
  • Wählen Sie das Bild aus
  • Gehen Sie zum Attribute-Inspector (cmd-opt-4)
  • "Rendern als" auf "Originalbild" setzen

Tun Sie dies nur, wenn alle -Instanzen dieses Bildes ohne Tönung angezeigt werden sollen.

 enter image description here

0
John Scalo