Domanda

Sulla mia barra di navigazione, ho un paio di a destra che hanno icone personalizzate (le immagini delle icone sono bianche, che hanno funzionato bene con la combinazione di colori di base di iOS 6).

Sotto iOS 7, caricando le immagini usando initWithTitle (vedi Code Snippet 1) Sostituisce il colore "bianco" nell'icona con la tinta globale corretta (in questo caso un colore specifico di blu scuro)

Codice Snippet 1:

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

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

Tuttavia, avevo bisogno di utilizzare initWithCustomview per superare uno strano cambiamento nel comportamento che stava causando la spostamento delle icone. L'idea di base era quella di impostare specificamente la dimensione delle icone. InitWithCustomView ha risolto il problema del dimensionamento, ma non visualizza le immagini dei pulsanti con la tinta globale, vengono visualizzate nel colore dell'immagine (bianco). Code Snippet 2 mostra come sto creando il pulsante con initWithCustomView.

Codice 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];

Tutto questo codice è ovviamente in (void) ViewDidload. Ho provato cose come:

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

o [BarbuttonaPappearance SettintColor: [UICOLOR BLACKCOLOR]]; // non funziona

E non prevalgono nel colore bianco dell'immagine. È quasi come se la creazione della vista personalizzata avvenga dopo che la vista guardasse il colore di tinta globale?

Come posso assicurarmi che l'icona del pulsante assumi la tinta globale?

Grazie!

È stato utile?

Soluzione

Volevo solo metterlo in un commento alla radice per dare un contesto migliore al segno di spunta "risposta" e dare una formattazione migliore.

Sono stato in grado di capire questo! Puoi dire all'immagine di renderla sempre come modello, che la costringerà ad affrontare il colore di tinta globale.

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

L'impostazione predefinita, se non lo si imposta, è "UiimagerEnderingModeautomatic", il che significa che renderà un modello o un'immagine originale basata sul contesto.

Altri suggerimenti

Dovrai superare il problema che stavi avendo con il primo frammento di codice, oppure dovrai creare una sottoclasse Uibutton che utilizza la sua immagine come maschera per mostrare il colore tinta drawRect:.

Consiglierei il primo approccio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top