Hier ist meine Registerkartenleiste:
Das folgende Bild zeigt das ausgeführte Programm und das ausgewählte Element "NEWS":
Es ist klar, dass die Farbe der Balkentönung gut funktioniert, wie ich will!
Die tintColor wirkt sich jedoch nur auf das Bild und nicht auf den Text aus.
Wenn ein Artikel ausgewählt wird (wie oben gezeigt, Nachrichten), wird die Artikelfarbe blau! Wie verhindere ich dies? Ich möchte, dass es weiß bleibt.
Warum ändert sich der Text bei Auswahl in eine weiße Farbe, aber nicht, wenn er nicht ausgewählt ist?
Grundsätzlich möchte ich, dass die Elementfarbe und die Textfarbe immer weiß sind.
Wie erreiche ich das? Vielen Dank für jede Hilfe.
Benötigt es einen schnellen Code für jeden einzelnen Artikel?
BEARBEITEN:
ios
swift
uitabbar
uitabbaritem
Greg Peckory
quelle
quelle
Antworten:
Aus UITabBarItem-Klassendokumenten:
Der Hinweis ist nicht, ob Sie UIImageRenderingModeAlwaysOriginal verwenden. Wichtig ist, wann Sie es verwenden.
Um die graue Farbe für nicht ausgewählte Elemente zu verhindern, müssen Sie nur die Systemfarbe für das nicht ausgewählte Bild verhindern. So geht's:
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 können, habe ich iOS gebeten, die Originalfarbe (Weiß, Gelb, Rot usw.) NUR für den Status NICHT AUSGEWÄHLT anzuwenden und das Bild so zu belassen, wie es für den Status AUSGEWÄHLT ist.
Möglicherweise müssen Sie auch eine Farbtonfarbe für die Registerkartenleiste hinzufügen, um eine andere Farbe für den Status AUSGEWÄHLT anzuwenden (anstelle der standardmäßigen blauen iOS-Farbe). Gemäß dem obigen Screenshot wenden Sie für den ausgewählten Status eine weiße Farbe an:
self.tabBar.tintColor = UIColor.whiteColor()
BEARBEITEN:
quelle
firstViewController.tabBarItem = customTabBarItem
TabBarClass: ??, ??
und ich kann es scheinbar nicht mit meiner Registerkartenleiste verbinden. Ist es die Registerkartenleiste oder die Registerkartensteuerung, an die ich sie anschließen muss?Swift 3
Ich habe dazu einen benutzerdefinierten Tabbar-Controller erstellt und diesen Code in die
viewDidLoad
Methode eingefügt .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 bei mir funktioniert!
quelle
Schnell
Für Bild:
custom.tabBarItem = UITabBarItem(title: "Home", image: UIImage(named: "tab_icon_normal"), selectedImage: UIImage(named: "tab_icon_selected"))
Für Text:
UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.gray], for: .normal) UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.red], for: .selected)
quelle
Swift 4.2 und Xcode 10
Die Lösung, die für mich funktioniert hat:
Dadurch wird verhindert, dass die Tab-Leistenkomponente ihren Standardbildton einstellt.
Text - hier habe ich eine einfache UITabBarController-Unterklasse erstellt und in der viewDidLoad-Methode die Standard- und ausgewählte Textfarbe wie folgt angepasst:
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 im Identitätsinspektor in IB als benutzerdefinierte Klasse für den Tab-Bar-Controller fest.
Voila! Das ist es.
iOS 13 Update :
Fügen Sie dies Ihrem Setup für iOS 13 hinzu:
if #available(iOS 13, *) { let appearance = UITabBarAppearance() appearance.stackedLayoutAppearance.selected.titleTextAttributes = [NSAttributedString.Key.foregroundColor: .red] tabBar.standardAppearance = appearance }
quelle
Swift 3
Dies hat bei mir funktioniert (unter Bezugnahme auf die Bildfarben von tabBarItems):
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 die UITabBar.tintColor keine Auswirkung hat, wenn Sie das Bild mit dem Rendermodus = .alwaysOriginal festlegen.
quelle
Swift 4: Ändern Sie es in Ihrem UITabBarController durch diesen Code
quelle
Swift 3
Stellen Sie zunächst sicher, dass Sie der Info.plist die BOOLEAN-Taste "Controller-basiertes Erscheinungsbild der Statusleiste anzeigen" hinzugefügt haben, und setzen Sie den Wert auf "NO".
Appdelegate.swift
Fügen Sie irgendwo nach "launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {" Code ein.
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)
Das ausgewählte Element
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .selected)
Die inaktiven Elemente
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.black], for: .normal)
Wenn Sie die Symbole nicht von Grund auf neu erstellen, sind abwechselnde Schwarz-Weiß-Versionen in Photoshop relativ einfach zu erstellen.
Adobe Photoshop (fast jede Version reicht aus)
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ü "Anpassungen" im Menü "Bild":
Klicken Sie auf "Invertieren"
Sie haben jetzt ein Negativ Ihres ursprünglichen Symbols.
Legen Sie in XCode eines der Bilder unter "Eigenschaften der Registerkartenleiste" in Ihrem Storyboard als "Ausgewähltes Bild" fest und geben Sie die "inaktive" Version unter dem Bild "Balkenelement" an.
Ta-Da 🍺
quelle
UITabBar.appearance().tintColor = UIColor.black
Versuchen Sie es in AppDelegate.swift (innerhalb der Anwendungsmethode ) hinzuzufügen :
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:
Mein Englisch ist so schlecht! Es tut mir Leid! :-)
quelle
Ich weiß, dass es hier viele Antworten gibt, aber ich kann keine einfache und gültige Antwort zum Kopieren / Einfügen für Swift 4.2 / Swift 5.1 finden
tabBarController?.tabBar.tintColor = UIColor.red tabBarController?.tabBar.unselectedItemTintColor = UIColor.green
Oder verwenden Sie
UITabBarItem.appearance()
anstelle vontabBarController?.tabBar
Bilder müssen UIImageRenderingModeAlwaysTemplate sein
quelle
Swift 3.0
Ich habe die Tabbar-Klassendatei 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) } } }
Nachher
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 hat die Lademethode Sie müssen das ausgewählte Bild festlegen und andere Bilder werden mit RenderingMode angezeigt. In den Registerkartenleisten-Delegierungsmethoden legen Sie das ausgewählte Bild gemäß Titel fest
quelle
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 unterordnen, 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
zuUITabBarItem.appearance()
.quelle
In Swift 4.2:
UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.white], for: .normal) UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.red], for: .selected)
quelle
Sie können tintColor von UIBarItem festlegen:
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.magentaColor()], forState:.Normal) UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState:.Selected)
quelle
Sie können dies auch folgendermaßen 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) }
Optional:
UITabBar.appearance().tintColor = UIColor.red
Ich hoffe es hilft dir.
quelle
Jahr: 2020 iOS 13.3
Kopieren Sie die folgenden Codes nach AppDelegate.swift -> func didFinishLaunchingWithOptions
//Set Tab bar text/item fonts and size let fontAttributes = [NSAttributedString.Key.font: UIFont(name: "YourFontName", size: 12.0)!] UITabBarItem.appearance().setTitleTextAttributes(fontAttributes, for: .normal) //Set Tab bar text/item color UITabBar.appearance().tintColor = UIColor.init(named: "YourColorName")
quelle
Dieser Code funktioniert für Swift 4, wenn Sie das Bild
Tab Bar Item
beim Drücken ändern möchten . Kopieren Sie die ersteviewDidLoad
Methode, die im Projekt ausgeführt wird, und fügen Sie sie einlet 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) } }
quelle
Von hier aus .
Jedes Element in der Registerkartenleiste enthält einen Titel, ein ausgewähltes Bild, ein nicht ausgewähltes Bild und einen Ausweiswert.
Verwenden Sie das Feld Bildtönung (selectedImageTintColor), um die Tönungsfarbe des Balkenelements anzugeben, wenn diese Registerkarte ausgewählt ist. Standardmäßig ist diese Farbe blau.
quelle
Swift 5:
let homeTab = UITabBarItem(title: "Home", image: UIImage(named: "YOUR_IMAGE_NAME_FROM_ASSETS")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal), tag: 1)
quelle
In Swift 5 ioS 13.2 haben sich die Dinge mit dem TabBar-Styling geändert.
Fügen Sie den folgenden Code in Ihre UITabBarController- Klasse ein.
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let appearance = UITabBarAppearance() appearance.backgroundColor = .white setTabBarItemColors(appearance.stackedLayoutAppearance) setTabBarItemColors(appearance.inlineLayoutAppearance) setTabBarItemColors(appearance.compactInlineLayoutAppearance) setTabBarItemBadgeAppearance(appearance.stackedLayoutAppearance) setTabBarItemBadgeAppearance(appearance.inlineLayoutAppearance) setTabBarItemBadgeAppearance(appearance.compactInlineLayoutAppearance) tabBar.standardAppearance = appearance } @available(iOS 13.0, *) private func setTabBarItemColors(_ itemAppearance: UITabBarItemAppearance) { itemAppearance.normal.iconColor = .lightGray itemAppearance.normal.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.gray] itemAppearance.selected.iconColor = .white itemAppearance.selected.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.orange] } @available(iOS 13.0, *) private func setTabBarItemBadgeAppearance(_ itemAppearance: UITabBarItemAppearance) { //Adjust the badge position as well as set its color itemAppearance.normal.badgeBackgroundColor = .orange itemAppearance.normal.badgeTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] itemAppearance.normal.badgePositionAdjustment = UIOffset(horizontal: 1, vertical: -1) }
quelle
Fügen Sie einfach eine neue UITabBarController-Referenz zum Projekt hinzu. Erstellen Sie als Nächstes eine Referenz von UITabBar in diesem Controller:
@IBOutlet weak var appTabBar: UITabBar!
In seiner viewDidLoad () , fügen Sie einfach unten Titeltextfarbe :
appTabBar.tintColor = UIColor.scandidThemeColor()
Für Bild
tabBarItem = UITabBarItem(title: "FirstTab", image: UIImage(named: "firstImage"), selectedImage: UIImage(named: "firstSelectedImage"))
quelle
Unterordnen Sie Ihren TabbarViewController und geben Sie in ViewDidLoad diesen 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
quelle
Swift 5.3
let vc = UIViewController() vc.tabBarItem.title = "sample" vc.tabBarItem.image = UIImage(imageLiteralResourceName: "image.png").withRenderingMode(.alwaysOriginal) vc.tabBarItem.selectedImage = UIImage(imageLiteralResourceName: "image.png").withRenderingMode(.alwaysOriginal) // for text displayed below the tabBar item UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.black], for: .selected)
quelle