Cambia il colore dell'elemento selezionato nella barra delle schede in uno storyboard


182

Desidero modificare gli elementi della barra delle schede in rosa quando selezionati invece del blu predefinito.

Come posso farlo usando l'editor dello storyboard in Xcode 6?

Ecco le mie impostazioni attuali che non funzionano, lo sfondo blu funziona ma il rosa non funziona:

inserisci qui la descrizione dell'immagine


Possibile duplicato di tab-bar-item-tint-color !
Utente31

Controlla questa risposta che ti aiuterà per la soluzione: stackoverflow.com/a/58727092/7804300
Talha Ahmed

Risposte:


419

Aggiungi l'attributo Runtime Color denominato "tintColor" da StoryBoard. Funziona ( per Xcode 8 e versioni successive ).

se vuoi un colore non selezionato .. puoi aggiungerlo unselectedItemTintColoranche tu .

impostando tintColor come attributo di runtime


24
ha funzionato per me quando ho aggiunto questa proprietà a UITabBarItem e non a UITabBar.
Sourabh86

1
Ma come si imposta l'elemento della barra delle schede Colore non selezionato nello storyboard?
Peter

1
Funziona perfettamente per la mia custodia: ho bisogno che i miei cinque elementi TabBar abbiano colori unici quando selezionati. Sono stato in grado di impostare questo attributo di runtime sul UITabBarItem, sul UINavigationControllercollegato alla mia tabBar e funziona perfettamente. Tutto senza scrivere alcun codice, il che è fantastico, poiché sto riutilizzando una classe VC tre volte. Grazie!
rosshump

7
viceversa - questo è l'unico approccio che funziona su iOS 10 (la tinta dal pannello degli attributi sembra non funzionare e anche l'attributo di runtime "tintColor" di uitabbaritem non funziona.
luky

5
StackOverflow 1: Apple 0
Sharukh Mastan

181

Questa elegante soluzione funziona alla grande su SWIFT 3.0 , SWIFT 4.2 e SWIFT 5.1 :

Nello Storyboard:

  1. Seleziona la barra delle schede
  2. Impostare un Runtime Attibute chiamato tintColor per il colore desiderato dell'icona selezionata sulla barra delle schede
  3. Impostare un runtime attibute chiamato unselectedItemTintColor per il colore desiderato della Icon Unselected sulla barra delle schede

inserisci qui la descrizione dell'immagine

Modifica: lavorare con Xcode 8/10, per iOS 10/12 e versioni successive .


6
Molte grazie. unselectedItemTintColor trova molto raro
Rushi trivedi

4
"unselectedItemTintColor" soluzione perfetta per me grazie.
fozoglu

Funzionerà se l'obiettivo di distribuzione è 8.0 o 9.0? Ho usato swift 3.0 e Xcode 8.0 per lo sviluppo
Mamta

2
Importante per selezionare la barra delle schede, in effetti ha funzionato in Swift 4 per me.
Contro Bulaquena

2
Eccellente! Ancora lavorando su xCode 10 :) non aggiorna l'editor visuale ma funziona una volta compilato :)
Mihail Minkov

66

In Swift, utilizzando xcode 7 (e versioni successive), puoi aggiungere quanto segue al tuo file AppDelegate.swift:

UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)

Questo è l'aspetto del metodo completo:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    // I added this line
    UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)

    return true
}

Nell'esempio sopra il mio articolo sarà bianco. "/255.0" è necessario perché si aspetta un valore da 0 a 1. Per il bianco, avrei potuto usare solo 1. Ma per altri colori probabilmente userete valori RGB.


3
Sembra che nessuno degli altri metodi funzioni (più). Funziona!
teddy

@Jarrod Sono stato a scherzare con questo per quasi 1 ora, questa risposta dovrebbe avere più voti. Grazie!
Lance Samaria

55

Su Xcode8ho cambiato ImageTintlo storyboard e funziona bene.

inserisci qui la descrizione dell'immagine

Il risultato:

inserisci qui la descrizione dell'immagine


1
Quando si utilizzano immagini personalizzate QUESTO è quello che ha funzionato per me
Juanjo

1
Questa dovrebbe essere la risposta accettata. Non richiede un attributo di runtime, il che significa che funziona nelle schermate di avvio!
Chris Douglass,

18

Swift 3 | Xcode 10

Se vuoi rendere tutti gli elementi della barra delle schede dello stesso colore (selezionati e non selezionati) ...


Passo 1

Assicurati che gli asset immagine siano impostati su Render As = Template Image . Ciò consente loro di ereditare il colore.

Risorse Xcode


Passo 2

Usa l'editor dello storyboard per modificare le impostazioni della barra delle schede come segue:

  • Imposta Barra delle schede: Tonalità immagine sul colore che vuoi che l'icona selezionata erediti.
  • Imposta Tab Bar: Bar Tint sul colore che vuoi che sia la barra delle schede.
  • Imposta visualizzazione: tinta al colore che vuoi vedere nell'editor dello storyboard, questo non influisce sul colore dell'icona quando la tua app viene eseguita.

Xcode Storyboard Editor


Passaggio 3

I passaggi 1 e 2 cambieranno il colore per l'icona selezionata. Se vuoi ancora cambiare il colore degli elementi non selezionati, devi farlo nel codice. Non ho trovato un modo per farlo tramite l'editor dello storyboard.

Creare una classe controller barra delle schede personalizzata ...

//  TabBarController.swift

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // make unselected icons white
        self.tabBar.unselectedItemTintColor = UIColor.white
    }
}

... e assegna la classe personalizzata al controller della scena della barra delle schede.

Xcode Storyboard Editor


Se hai capito come cambiare il colore dell'icona non selezionata tramite l'editor dello storyboard, fammelo sapere. Grazie!


self.tabBar.unselectedItemTintColor = UIColor.white self.tabBar.tintColor = #colorLiteral(red: 0.2, green: 0.7333333333, blue: 0.3450980392, alpha: 1) Lavora per me
Wahab Khan Jadon

9

inserire questo codice nel viewDidLoad del controller di visualizzazione di cui si desidera modificare il colore

[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];

1
Non c'è modo di cambiare per tutte le schede?
Deekor

Basta inserire il codice con lo stesso colore nella vista che ha caricato tutte le tue schede
Nick

puoi usare questo codice subito dopo aver creato il tuo UITabController, imposterà il colore che hai menzionato per tutti gli elementi della scheda sulla selezione.
Jerrin

Non esiste un metodo simile setSelectedImageTintColor
Madhu Avinash

8

È inoltre possibile impostare il colore della tinta della barra dell'immagine selezionata in base al percorso chiave:

inserisci qui la descrizione dell'immagine

Spero che questo ti possa aiutare !! Grazie


in iOS 9 non cambia il colore non selezionato
Saeed Rahmatolahi

In che modo ciò aiuterebbe a cambiare il colore dell'icona UITabBar?
Madhu Avinash

7

XCode 8.2, iOS 10, Swift 3: ora c'è un unselectedItemTintColorattributo per tabBar:

self.tabBar.unselectedItemTintColor = UIColor(red: 0/255.0, green: 200/255.0, blue: 0/255.0, alpha: 1.0)

6

Puoi cambiare i colori UITabBarItem per storyboard ma se vuoi cambiare i colori per codice è molto semplice:

// Usa questo per cambiare il colore della barra selezionata

   [[UITabBar appearance] setTintColor:[UIColor blueColor]];

// Questo per modificare la barra non selezionata (iOS 10)

   [[UITabBar appearance] setUnselectedItemTintColor:[UIColor yellowColor]];

// E questa linea per cambiare il colore di tutte le tabbar

   [[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];

setUnselectedItemTintColor è solo per iOS 10
ondermerol

6

Questo modo migliore è cambiare Image Tintnello storyboard

inserisci qui la descrizione dell'immagine


5

In qualche modo non siamo in grado di cambiare il colore della tinta dell'elemento selezionato nella barra delle schede usando solo lo storyboard, quindi ho aggiunto il codice di seguito nel mio ViewDidLoad, spero che questo aiuti.

[[UITabBar appearance] setTintColor:[UIColor whiteColor]]; 

5

Aggiungi questo codice nella funzione delegate -did_finish_launching_with_options della tua app

UITabBar.appearance().tintColor = UIColor( red: CGFloat(255/255.0), green: CGFloat(99/255.0), blue: CGFloat(95/255.0), alpha: CGFloat(1.0) )

metti l'RBG del colore richiesto


4

Questa è la soluzione in Swift 3 che funziona in iOS 10:

Innanzitutto, crei la tua sottoclasse del controller della barra delle schede e la aggiungi al controller della scheda nello storyboard. Nel viewDidLoad()metodo puoi quindi personalizzare la barra delle schede. Va qui precisato che l' tintColorattributo del tabBarrappresenta il colore dell'articolo selezionato non il colore di quelli non selezionati! Per cambiare il colore degli elementi non selezionati, ti consiglio di scorrere ogni elemento e utilizzare i colori originali delle tue immagini, in modo che non vengano renderizzati automaticamente come grigi.

class CustomTabBarVC: UITabBarController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()

        self.tabBar.tintColor = AppColor.normalRed
        self.tabBar.barTintColor = .white
        self.tabBar.isTranslucent = true

        if let items = self.tabBar.items
        {
            for item in items
            {
                if let image = item.image
                {
                    item.image = image.withRenderingMode( .alwaysOriginal )
                }
            }
        }
    }
}

L'unico svantaggio di questo approccio è che le immagini dei tuoi articoli devono già avere il colore desiderato a cui miri.


Complicato. La risposta di Jarrod funziona bene con tutte le icone.
Jose Ramirez

2

Puoi sottoclassare il UITabBarControllere sostituire quello con esso nello storyboard. Nella tua viewDidLoadimplementazione di sottoclasse chiama questo:

[self.tabBar setTintColor:[UIColor greenColor]];

ottenere:'UITabBar' does not have a member named 'setSelectedImageTintColor'
Deekor

Inoltre sto usando swift, quindi metto: self.tabBar.setSelectedImageTintColor = UIColor.greenColornon sono sicuro che sia corretto o meno
Deekor

2
@Deekor non lo tintColorè selectedImageTintColor, btw selectedImageTintColorè deprecato in iOS 8.
chancyWu
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.