it-swarm.com.de

Ändern der Bild- und Textfarbe der Registerkartenleiste iOS

Hier ist meine Tab-Leiste:

enter image description here

Das folgende Bild zeigt das laufende Programm und das ausgewählte Element "NEWS":

enter image description here

Es ist klar, dass die Farbe des Balkens gut funktioniert, wie ich will!

TintColor wirkt sich jedoch nur auf das Bild und nicht auf den Text aus.

Wenn ein Element ausgewählt wird (wie oben, News), wird die Elementfarbe blau. Wie kann ich das verhindern? Ich möchte, dass es weiß bleibt.

Warum ändert sich der Text in eine weiße Farbe, wenn er ausgewählt wird, nicht aber wenn er nicht ausgewählt ist?

Grundsätzlich möchte ich, dass die Element- und Textfarbe immer weiß ist.

Wie kann ich das erreichen? Danke für jede Hilfe.

Ist für jeden einzelnen Artikel ein Swift-Code erforderlich?

BEARBEITEN:

enter image description here

51
Greg Peckory

Aus der UITabBarItem-Klasse docs:

Die tatsächlichen nicht ausgewählten und ausgewählten Bilder lauten standardmäßig automatisch aus den Alpha-Werten in den Quellbildern erstellt. Zu Systemfarbgebung verhindern, Bilder mit .__ versehen. UIImageRenderingModeAlwaysOriginal.

Der Hinweis ist nicht, ob Sie UIImageRenderingModeAlwaysOriginal verwenden, es ist wichtig, wann Sie es verwenden.

Um die graue Farbe für nicht ausgewählte Elemente zu verhindern, müssen Sie lediglich die Systemfärbung für das nicht ausgewählte Bild verhindern. So gehen Sie vor:

var firstViewController:UIViewController = UIViewController()
// The following statement is what you need
var customTabBarItem:UITabBarItem = UITabBarItem(title: nil, image: UIImage(named: "YOUR_IMAGE_NAME")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal), selectedImage: UIImage(named: "YOUR_IMAGE_NAME"))
firstViewController.tabBarItem = customTabBarItem

Wie Sie sehen, habe ich iOS gebeten, die Originalfarbe (Weiß, Gelb, Rot, was auch immer) des Bildes NUR für den UNSELECTED-Zustand anzuwenden und das Bild für den SELECTED-Zustand zu belassen.

Sie müssen möglicherweise auch eine Tönungsfarbe für die Registerkartenleiste hinzufügen, um eine andere Farbe für den Status SELECTED (anstelle der standardmäßigen blauen Farbe von iOS) anzuwenden. Wie im obigen Screenshot oben, wenden Sie weiße Farbe für den ausgewählten Status an:

self.tabBar.tintColor = UIColor.whiteColor()

BEARBEITEN:

enter image description here

60
Kingofmit

Swift 3

Ich habe es gemacht, indem ich einen benutzerdefinierten Tabbar-Controller erstellt und diesen Code in die viewDidLoad-Methode eingefügt habe.

    if let count = self.tabBar.items?.count {
        for i in 0...(count-1) {
            let imageNameForSelectedState   = arrayOfImageNameForSelectedState[i]
            let imageNameForUnselectedState = arrayOfImageNameForUnselectedState[i]

            self.tabBar.items?[i].selectedImage = UIImage(named: imageNameForSelectedState)?.withRenderingMode(.alwaysOriginal)
            self.tabBar.items?[i].image = UIImage(named: imageNameForUnselectedState)?.withRenderingMode(.alwaysOriginal)
        }
    }

    let selectedColor   = UIColor(red: 246.0/255.0, green: 155.0/255.0, blue: 13.0/255.0, alpha: 1.0)
    let unselectedColor = UIColor(red: 16.0/255.0, green: 224.0/255.0, blue: 223.0/255.0, alpha: 1.0)

    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: unselectedColor], for: .normal)
    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: selectedColor], for: .selected)

Es hat für mich funktioniert!

 enter image description here

60
AMarones

Schnell


Für Bild:

custom.tabBarItem = UITabBarItem(title: "Home", image: UIImage(named: "tab_icon_normal"), selectedImage: UIImage(named: "tab_icon_seelcted"))

Für Text:  

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState:.Normal)

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState:.Selected)
44
svmrajesh

Swift 4.2 und Xcode 10

Die Lösung, die für mich funktioniert hat:

  1. Bild-Setup - Legen Sie im Storyboard das Element "Bild" und "Ausgewähltes Bild" fest. Um die Tönungsüberlagerung auf den Bildern zu entfernen, gehen Sie zum Assets-Katalog, wählen Sie das Bild aus und ändern Sie den Rendermodus folgendermaßen:

 image render mode

Dadurch wird verhindert, dass die Tab-Leisten-Komponente ihren Standard-Bildfarbton festlegt.

  1. Text - hier habe ich eine einfache UITabBarController-Unterklasse erstellt, und in ihrer viewDidLoad-Methode habe ich die Standardeinstellung angepasst und die Textfarbe folgendermaßen ausgewählt:

    class HomeTabBarController: UITabBarController {
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let appearance = UITabBarItem.appearance(whenContainedInInstancesOf: [HomeTabBarController.self])
            appearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: .black], for: .normal)
            appearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: .red], for: .selected)
        }
    }
    

Legen Sie diese Klasse einfach als benutzerdefinierte Klasse für den Tab-Leisten-Controller in Identity Inspector in IB fest.

Voila! Das ist es. 

18
Vasil Garov

Swift 3

Dies funktionierte für mich (in Bezug auf das Setzen von TabBarItems-Bildfarben):

UITabBar.appearance().tintColor = ThemeColor.Blue

if let items = tabBarController.tabBar.items {
        let tabBarImages = getTabBarImages() // tabBarImages: [UIImage]
        for i in 0..<items.count {
            let tabBarItem = items[i]
            let tabBarImage = tabBarImages[i]
            tabBarItem.image = tabBarImage.withRenderingMode(.alwaysOriginal)
            tabBarItem.selectedImage = tabBarImage
        }
    }

Ich habe festgestellt, dass UITabBar.tintColor keine Auswirkung hat, wenn Sie ein Bild mit dem Rendermodus = .alwaysOriginal festlegen.

12

Schnell 3

Stellen Sie zunächst sicher, dass Sie die BOOLEAN-Taste "Controller-basierte Statusleiste anzeigen" zu Info.plist hinzugefügt haben, und setzen Sie den Wert auf "NEIN".

Appdelegate.Swift

Code irgendwo nach "launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {" einfügen

  1. Ändern Sie die Farbe der Registerkartenleiste selbst mit dem RGB-Farbwert:

UITabBar.appearance().barTintColor = UIColor(red: 0.145, green: 0.592, blue: 0.804, alpha: 1.00)

ODER eine der Standardfarben der Benutzeroberfläche:

UITabBar.appearance().barTintColor = UIColor.white)


  1. Ändern Sie die Textfarbe der Registerkartenelemente:

Das ausgewählte Element

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .selected)

Die inaktiven Elemente

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.black], for: .normal)

  1. Um die Farbe des Bildes zu ändern, ist es meiner Meinung nach am einfachsten, Bilder zu trennen, eines für jeden Zustand.

Wenn Sie die Symbole nicht von Grund auf neu erstellen, ist es in Photoshop relativ einfach, abwechselnd Schwarzweiß-Versionen zu erstellen.


Adobe Photoshop (fast jede Version wird es tun)

Stellen Sie sicher, dass Ihr Symbolbild einen transparenten Hintergrund hat und das Symbol selbst schwarz (oder geschlossen) ist.

Öffnen Sie die Bilddatei, und speichern Sie sie unter einem anderen Dateinamen (z. B. exampleFilename-Inverted.png).

Im Untermenü "Einstellungen" im Menü "Bild":

Klicken Sie auf "Invertieren"

Sie haben jetzt ein Negativ Ihres ursprünglichen Symbols.

Legen Sie in XCode unter den Eigenschaften der Registerkartenleiste in Ihrem Storyboard eines der Bilder als "Ausgewähltes Bild" fest und geben Sie unter "Balkenelement" die "inaktive" Version an.

Ta-Da ????

11
Andreas

Fügen Sie es in AppDelegate.Swift hinzu (in der application -Methode):

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

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

Beispiel:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Tab bar icon selected color
    UITabBar.appearance().tintColor = UIColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 1.0)
    // For WHITE color: UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)
    return true
}

Beispiel:

 enter image description here

 enter image description here

Mein Englisch ist so schlecht! Es tut mir Leid! :-)

7
Fred Sousa

Swift 4: Ändern Sie es in Ihrem UITabBarController durch diesen Code

tabBar.unselectedItemTintColor = .black
4
Mixon McLaren

Swift 3.0

Ich habe die Tabellenklassendatei erstellt und den folgenden Code geschrieben

In viewDidLoad:

self.tabBar.barTintColor = UIColor.white
self.tabBar.isTranslucent = true

let selectedColor   = UIColor.red
let unselectedColor = UIColor.cyan

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: unselectedColor,NSFontAttributeName: UIFont(name: "Gotham-Book", size: 10)!], for: .normal)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: selectedColor,NSFontAttributeName: UIFont(name: "Gotham-Book", size: 10)!], for: .selected)

if let items = self.tabBar.items {
    for item in items {
        if let image = item.image {
            item.image = image.withRenderingMode( .alwaysOriginal )
            item.selectedImage = UIImage(named: "(Imagename)-a")?.withRenderingMode(.alwaysOriginal)
        }
    }
}

Nach viewDidLoad:

   override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {

   if(item.title! == "title")
   {
    item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }

}

in der Ansicht zum Laden der Methode müssen Sie das ausgewählte Bild festlegen, und andere Bilder werden mit RenderingMode und in der Registerkarten-Delegierungsmethode angezeigt, in der Sie das ausgewählte Bild als Titel festlegen 

4
Amol Pokale

sie können tintColor von UIBarItem einstellen:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.magentaColor()], forState:.Normal)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState:.Selected)
2
Sunil Prajapati

Dieser Code funktioniert für Swift 4, wenn Sie das Bild des Registerkartenelements ändern möchten, wenn Sie die Taste . Drücken. Kopieren und Einfügen in die erste viewDidLoad-Methode, die in das Projekt eingefügt wird

let arrayOfImageNameForSelectedState: [String] = ["Image1Color", "Image2Color", "Image3Color"] let arrayOfImageNameForUnselectedState: [String] = ["Image1NoColor", "Image2NoColor", "Image3NoColor"]

    print(self.tabBarController?.tabBar.items?.count)

    if let count = self.tabBarController?.tabBar.items?.count {
        for i in 0...(count-1) {
            let imageNameForSelectedState   = arrayOfImageNameForSelectedState[i]
            print(imageNameForSelectedState)
            let imageNameForUnselectedState = arrayOfImageNameForUnselectedState[i]
            print(imageNameForUnselectedState)
            self.tabBarController?.tabBar.items?[i].selectedImage = UIImage(named: imageNameForSelectedState)?.withRenderingMode(.alwaysOriginal)
            self.tabBarController?.tabBar.items?[i].image = UIImage(named: imageNameForUnselectedState)?.withRenderingMode(.alwaysOriginal)
        }
    }
2

Für Swift 4.0 wurde es jetzt wie folgt geändert:

tabBarItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.gray], for: .normal)
tabBarItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.blue], for: .selected)

Sie müssen das UITabBarItem nicht subklassifizieren, wenn Sie nur die Textfarbe ändern möchten. Fügen Sie einfach den obigen Code in die viewDidLoad-Funktion Ihres View-Controllers ein.

Für globale Einstellungen ändern Sie tabBarItem in UITabBarItem.appearance().

2
Eric Yuan

Sie können auch auf diese Weise tun:

override func viewWillLayoutSubviews() {  
  if let items = self.tabBar.items {
    for item in 0..<items.count {
      items[item].image = items[item].image?.withRenderingMode(.alwaysOriginal)
            items[item].selectedImage = items[item].selectedImage?.withRenderingMode(.alwaysTemplate)
    }

Wahlweise:

 UITabBar.appearance().tintColor = UIColor.red

Ich hoffe es hilft dir.

2
V D Purohit

Ich weiß, hier gibt es viele Antworten, aber ich kann keine einfache und gültige Antwort zum Kopieren/Einfügen für Swift 4.2 finden.

tabBarController?.tabBar.tintColor = UIColor.red
tabBarController?.tabBar.unselectedItemTintColor = UIColor.green

Oder verwenden Sie UITabBarItem.appearance() anstelle von tabBarController?.tabBar

Bilder müssen UIImageRenderingModeAlwaysTemplate sein. 

1
kuzdu

In Swift 4.2:

UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.white], for: .normal)
UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.red], for: .selected)
1
Vinu Jacob

Von hier .

Jedes Element der Registerkartenleiste hat einen Titel, ein ausgewähltes Bild, ein nicht ausgewähltes Bild und einen Badge-Wert.

Verwenden Sie das Feld Bildfarbton (selectedImageTintColor), um die Farbtonfarbe des Balkenelements anzugeben, wenn diese Registerkarte ausgewählt wird. Standardmäßig ist diese Farbe blau.

1
vp_gold

Unterklassen Sie Ihren TabbarViewController und geben Sie in ViewDidLoad den folgenden Code ein:

 [UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor darkGreyColorBT]} forState:UIControlStateNormal];
    [UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor nightyDarkColorBT]} forState:UIControlStateSelected];

    self.tabBar.items[0].image  = [[UIImage imageNamed:@"ic-pack [email protected]"]  imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[0].selectedImage  = [[UIImage imageNamed:@"[email protected]"]  imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[1].image = [[UIImage imageNamed:@"ic-sleeptracker [email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[1].selectedImage  = [[UIImage imageNamed:@"[email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[2].image = [[UIImage imageNamed:@"ic-profile [email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[2].selectedImage  = [[UIImage imageNamed:@"[email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

Dies ist die einfachste Arbeitslösung, die ich habe

0
coolcool1994

Fügen Sie dem Projekt einfach eine neue UITabBarController-Referenz hinzu. Erstellen Sie als Nächstes eine Referenz von UITabBar in diesem Controller:

@IBOutlet weak var appTabBar: UITabBar!

Fügen Sie in viewDidLoad () unten für title Textfarbe Folgendes hinzu:

    appTabBar.tintColor = UIColor.scandidThemeColor()

Für Bild

    tabBarItem = UITabBarItem(title: "FirstTab", image: UIImage(named: "firstImage"), selectedImage: UIImage(named: "firstSelectedImage"))
0
Shobhit C