Frage

Auf meiner Navigationsleiste habe ich ein paar Rightbarbuttonitems mit benutzerdefinierten Symbolen (die Icon -Bilder sind weiß, was gut mit dem Grundfarbschema von iOS 6 funktioniert).

Unter iOS 7 ersetzt das Laden der Bilder mit Initwithtitle (siehe Code -Snippet 1) die "weiße" Farbe im Symbol durch den richtigen globalen Farbton (eine bestimmte Farbe von Dunkelblau in diesem Fall).

Code -Snippet 1:

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

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

Ich musste jedoch InitWithCustomView verwenden, um eine seltsame Verhaltensänderung zu überwinden, die dazu führte, dass die Symbole aus dem Sicht bewegen. Die Grundidee bestand darin, die Größe der Symbole spezifisch festzulegen. InitWithCustomView hat das Größenproblem gelöst, zeigt jedoch nicht die Schaltflächenbilder mit der globalen Farbton an, sie werden in der Farbe des Bildes (weiß) angezeigt. Code -Snippet 2 zeigt, wie ich die Schaltfläche mit initWithCustomView erstelle.

Code -Snippet 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];

All dieser Code ist natürlich in (void) viewDidload. Ich habe Dinge ausprobiert wie:

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

oder [BarbuttonAppearance settColor: [Uicolor BlackColor]]; // funktioniert nicht

Und sie überschreiben die weiße Farbe des Bildes nicht. Es ist fast so, als würde die Erstellung der benutzerdefinierten Ansicht nach der Aussicht auf die globale Farbfarbe erfolgen?

Wie kann ich sicherstellen, dass das Button -Symbol den globalen Farbton annimmt?

Vielen Dank!

War es hilfreich?

Lösung

Ich wollte dies nur in einen Root -Kommentar bringen, um dem Checkmark "Antwort" einen besseren Kontext zu geben und eine bessere Formatierung zu geben.

Ich konnte diesen herausfinden! Sie können das Bild feststellen, dass er immer als Vorlage rendern soll, was es dazu zwingt, die globale Farbfarbe zu übernehmen.

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

Wenn Sie es nicht festlegen, ist "UIImagerenderingModeAutomatic", was bedeutet, dass es als Vorlage oder Originalbild basierend auf dem Kontext rendert.

Andere Tipps

Entweder müssen Sie das Problem mit dem ersten Code -Snippet umgehen, oder Sie müssen eine Uibutton -Unterklasse erstellen, die sein Bild als Maske verwendet, um die Farbtonfarbe in der Farbfarbe anzuzeigen drawRect:.

Ich würde den ersten Ansatz empfehlen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top