2014-11-10 4 views
14

Wie kommt es, dass das Symbol info.png blau bleibt und nicht die Originalfarbe dieses Bildes enthält? Ich verwende den folgenden Code unter:UIBarButtonItem Bild bleibt blau und nicht die Originalfarbe des Bildes?

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"info.png"] 
                      style:UIBarButtonItemStylePlain 
                      target:self 
                      action:@selector(info:)]; 
+0

Sie haben wahrscheinlich die Tint-Farbe auf Ihrem View-Controller auf den Standard-Blau eingestellt. – brandonscript

+0

Das ist die Sache, ich stelle keine Tintcolor überhaupt, auch nicht auf dem Appdelegate.m – Jan

+1

Es ist aus der Box - Sie müssen es deaktivieren. – brandonscript

Antwort

2

Da die Farbe von barButtonItems in Ihrer Anwendung auf die tintColor Eigenschaft auf das Fenster der Anwendung verknüpft ist.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window.tintColor = [UIColor redColor]; 
    return YES; 
} 
+0

Dies wird die Farbe rot, wenn ich es auf Null setzen wird es wieder die blaue Farbe geben. – Jan

+4

Versuchen Sie, das Bild wie folgt instanziieren: 'UIImage * image = [[UIImage imageNamed: @" myImage.png "] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];' – carlodurso

36

Standardmäßig wird das Bild in UINavigationBar-Balkenschaltflächenelementen im Vorlagenmodus gerendert. Sie können es auf Original setzen.

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"info.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 
                     style:UIBarButtonItemStylePlain 
                     target:self 
                     action:@selector(info:)]; 
+0

Danke, Renderparameter hilft mir! =) – Nubaslon

+0

Gibt es einen anderen Weg? Wie spezielle Bildtypen, bei denen "UIImageRenderingModeAlwaysOriginal" nicht gesetzt werden muss? –

+0

Fantastische Lösung für mein Problem ... Vielen Dank –

1

Ok, hab es geschafft ... Ich habe das Bild zuerst in den Originalzustand versetzt.

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

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:image 
                      style:UIBarButtonItemStylePlain 
                      target:self 
                      action:@selector(info:)]; 
+0

Dies wird in Apples Dokument "Symbolleisten" deutlich erklärt: Bar Button Item Icons Jeder bar-Button in einer Symbolleiste kann ein benutzerdefiniertes Bild anstelle von Text haben. Sie können dieses Bild während der Initialisierung der Balkenschaltfläche zur Verfügung stellen. Beachten Sie, dass ein Balkenschaltflächenbild automatisch als Vorlagenbild in einer Symbolleiste dargestellt wird, sofern Sie den Rendermodus nicht ausdrücklich auf UIImageRenderingModeAlwaysOriginal festlegen. Weitere Informationen finden Sie unter Vorlagenbilder. – rdelmar

6

Für Swift 2.1+ es würde wie folgt aussehen:

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

oder einfach

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

Gibt es einen anderen Weg? Wie spezielle Bildtypen, bei denen "UIImageRenderingModeAlwaysOriginal" nicht gesetzt werden muss? –

+1

nicht afaik - es ist eine Begrenzung der Bar-Button-Klasse –

0

Ändern der Bar-Taste aus dem Storyboard Element Tönungsfarbe. Oder Farbe aus dem Bild im Storyboard.

Die Farbe sollte Ihre erwartete Farbe als hex oder rgb sein.

7

Swift 3:

let image : UIImage? = UIImage.init(named: "heart.png")!.withRenderingMode(.alwaysOriginal) 
1

Sie können es von Vermögenswerten als auch. Gehen Sie zu Assets.xcassetts >> Wählen Sie das Bild aus, das als Bild für den barbutton item verwendet wird. Tippen Sie im rechten Seitenbereich auf den Attributinspektor. Wählen Sie Rendern als Originalbild aus. Es wird früher Standard sein. Sie werden jetzt ein farbiges Bild sehen.

Verwandte Themen