Ändern Sie die Farbtonfarbe der Registerkartenleiste unter iOS 7

75

Gibt es eine Möglichkeit, den Farbton einer Registerkartenleiste unter iOS 7 vom Standardweiß mit blauen Symbolen in einen anderen Farbton mit verschiedenen Farbtasten zu ändern?

Jake Chasan
quelle
Möglicherweise müssen Sie es unterordnen. Ich habe es noch nie versucht, daher bin ich mir nicht 100% sicher, aber dies scheint eine mögliche Lösung zu sein
erdekhayser

Antworten:

207

Versuchen Sie Folgendes:

[[UITabBar appearance] setTintColor:[UIColor redColor]];
[[UITabBar appearance] setBarTintColor:[UIColor yellowColor]];

Um die nicht aktiven Tasten zu tönen, geben Sie den folgenden Code in Ihre VCs ein viewDidLoad:

UITabBarItem *tabBarItem = [yourTabBarController.tabBar.items objectAtIndex:0];

UIImage *unselectedImage = [UIImage imageNamed:@"icon-unselected"];
UIImage *selectedImage = [UIImage imageNamed:@"icon-selected"];

[tabBarItem setImage: [unselectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[tabBarItem setSelectedImage: selectedImage];

Sie müssen dies für alle tabBarItems tun, und ja, ich weiß, dass es hässlich ist und hoffe, dass es einen saubereren Weg gibt, dies zu tun.

Schnell:

UITabBar.appearance().tintColor = UIColor.red

tabBarItem.image = UIImage(named: "unselected")?.withRenderingMode(.alwaysOriginal)
tabBarItem.selectedImage = UIImage(named: "selected")?.withRenderingMode(.alwaysOriginal)
Tarek Hallak
quelle
1
Perfekt. Vielen Dank. Noch eine kurze Frage: Gibt es eine Möglichkeit, die nicht aktiven Schaltflächen in der Registerkartenleiste zu tönen (sie sind grau, wenn sie nicht ausgewählt sind)?
Jake Chasan
2
setFinishedSelectedImage ist in iOS7 veraltet.
2.
@null Code für nicht aktive Schaltflächen hat forState: UIControlStateNormal, wodurch die Farbe aller Registerkartenleistenelemente (ausgewählt und nicht ausgewählt) in meiner Anwendung geändert wird. Es gibt einen anderen Status UIControlStateSelected, der jedoch nicht ausgewählt wurde.
Sharj
1
[[UITabBarItem-Darstellung] setTitleTextAttributes .. hat die Farbe der nicht ausgewählten Elemente nicht geändert, sie bleiben grau.
Tom Kincaid
Verwenden Sie UIControlStateNormal für alle Elemente der Registerkartenleiste. Verwenden Sie UIControlStateSelected für ausgewählte Elemente. Beispiel: [[UITabBarItem-Darstellung] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor], NSForegroundColorAt;
user8675
22

Es gibt einen viel einfacheren Weg, dies zu tun.

Öffnen Sie einfach den Dateiinspektor und wählen Sie einen "globalen Farbton".

Sie können die Farbfarbe einer App auch im Interface Builder festlegen. Über das Menü "Globaler Farbton" im Abschnitt "Interface Builder-Dokument" des Dateiinspektors können Sie das Fenster "Farben" öffnen oder eine bestimmte Farbe auswählen.

Siehe auch:

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html

herdi
quelle
8
Globales Farbmenü für Nicht-Storyboard-Schreibfedern nicht verfügbar.
QED
5
Dies wäre großartig, außer es funktioniert nicht für mich in Xcode 5.
Robert Atkins
3
Funktioniert nicht, Xcode 5.1. "window.tintColor = [UIColor lilaColor]" tut.
Sofi Software LLC
1
Mit der Einstellung für den globalen Farbton des Interface Builder-Dokuments können Sie den Farbton für eine App nicht festlegen. Sie können den Farbton für ein Storyboard festlegen. Wenn Sie mehrere haben, können Sie ihn wie oben beschrieben mischen und anpassen oder im Code festlegen.
jbbenni
1
Wie seltsam. Ich habe gerade versucht, die Farbtonfarbe im Storyboard in iOS 7, Xcode 5.1.1, einzustellen, und es tut nichts für eine von Storyboard erstellte UITabBar.
Alex Zavatone
18

iOS 7.1.1

Wenn jemand eine global eingestellte Farbtonfarbe verwenden muss:

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

In didFinishLaunchingWithOptionsvon AppDelegate.

Der folgende Code ändert bei jeder viewDidLoadMethode nur die Farbe der Registerkartenleiste :

[self.tabBarController.tabBar setTintColor:[UIColor redColor]];
Ömer Faruk Almalı
quelle
Wenn Sie diese Option verwenden, können Sie die Farbe dennoch Bildschirm für Bildschirm überschreiben?
Jake Chasan
Mit dem Code in der zweiten Zeile können Sie die Farbe für jeden Bildschirm
separat
1
Dies ist die einzige Lösung, die ich gefunden habe und die über die VDL eines VC in iOS 7 für das aktuelle Registerkartenelement funktioniert. [self.tabBarController.tabBar setTintColor: [UIColor orangeColor]];
Alex Zavatone
9

Im App-Delegaten didFinishLaunchingWithOptions:

window.tintColor = [UIColor purpleColor];

Legt die Farbtonfarbe global für die App fest.

Sofi Software LLC
quelle
Tut nichts unter iOS 7.1 in Xcode 5.1.1. Auch bei Verwendung von _window im AppDelegate.
Alex Zavatone
8

Schreiben Sie dies in Ihre View Controller-Klasse Ihrer Registerkartenleiste:

// Generate a black tab bar
self.tabBarController.tabBar.barTintColor = [UIColor blackColor];

// Set the selected icons and text tint color
self.tabBarController.tabBar.tintColor = [UIColor orangeColor];
Ruchi
quelle
2

Was bei mir endlich funktioniert hat war:

[self.tabBar setTintColor:[UIColor redColor]];
[self.tabBar setBarTintColor:[UIColor yellowColor]];
Javier Calatrava Llavería
quelle
1

Stellen Sie im " Attributes Inspector " Ihres Registerkartenleisten-Controllers im Interface Builder sicher, dass Ihre untere Leiste auf "Undurchsichtige Registerkartenleiste" eingestellt ist:

Wählen Sie Undurchsichtig

Gehen Sie jetzt zu Ihrer AppDelegate.m- Datei. Finden:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Fügen Sie dann diesen Code zwischen die geschweiften Klammern ein, um die Farben der Schaltflächen der Registerkartenleiste und des Hintergrunds der Registerkartenleiste zu ändern:

///----------------SET TAB BAR COLOR------------------------//

//--------------FOR TAB BAR BUTTON COLOR---------------//
[[UITabBar appearance] setTintColor:[UIColor greenColor]];

//-------------FOR TAB BAR BACKGROUND COLOR------------//
[[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];

quelle
0

Nachdem ich alle vorgeschlagenen Lösungen ausprobiert hatte, konnte ich keine sehr hilfreichen finden.

Ich habe endlich folgendes versucht:

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

das hat perfekt geklappt.

Ich habe nur ein Bild für jedes TabBarItem bereitgestellt. Ich brauchte nicht einmal ein ausgewähltes Bild.

Ich habe es sogar in den Child-ViewControllern verwendet, um verschiedene TintColors festzulegen:

UIColor *theColorYouWish = ...;
if ([[self.parentViewController class] isSubclassOfClass:[UITabBarController class]]){
    UITabBarController *tbc = (UITabBarController *) self.parentViewController;
    [tbc.tabBar setTintColor:theColorYouWish];
}
dfinki
quelle
-3

Sie können Ihre Farbtonfarbe und Schriftart als setTitleTextattribute festlegen:

UIFont *font= (kUIScreenHeight>KipadHeight)?[UIFont boldSystemFontOfSize:32.0f]:[UIFont boldSystemFontOfSize:16.0f];
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName,
                            tintColorLight, NSForegroundColorAttributeName, nil];
[[UINavigationBar appearance] setTitleTextAttributes:attributes];
user3737678
quelle