So ändern Sie die Hintergrundfarbe von UINavigationBar in AppDelegate

90

Ich weiß, wie man das UINavigationBarHintergrundbild dadurch ändert

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nabbar"] forBarMetrics:UIBarMetricsDefault];

und ich weiß, wie man die Leiste in jedem auf verschiedene Farben setzt Views..... Jetzt möchte ich die Hintergrundfarbe ändern, ohne ein Bild in eine Volltonfarbe aus dem zu verwenden app delegate. Ich möchte es nicht jedes Mal in jeder Ansicht festlegen und ich möchte keine schreiben CGRect.

Ich habe es versucht, [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];aber es funktioniert nicht und ich kann nirgendwo einen Code finden, der im App-Delegaten funktioniert.

Könnte mich bitte jemand in die richtige Richtung weisen?

Jonathan Thurft
quelle

Antworten:

202

Sie können verwenden [[UINavigationBar appearance] setTintColor:myColor];

Seit iOS 7 müssen Sie einstellen [[UINavigationBar appearance] setBarTintColor:myColor];und auch [[UINavigationBar appearance] setTranslucent:NO].

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];
Seb Thiebaud
quelle
Vielen Dank, wissen Sie, wie Sie den weißen Standardverlauf von oben entfernen können, um ihn einfarbig zu machen?
Jonathan Thurft
1
Mit tintColordem Gefälle bleibt. Wenn Sie diesen Verlauf nicht haben möchten, müssen Sie Ihre UINavigationBar ODER eine Unterklasse erstellen, um ein UIImage für das Erscheinungsbild zu erstellen.
Seb Thiebaud
59
auf iOS 7, das nicht funktionierte, musste ich verwendennavigationBar.barTintColor = myColor;
Juan de la Torre
4
translucentDie Eigenschaft kann mit UIAppearance in iOS 6 und iOS 7 einfach nicht festgelegt werden. Daher [[UINavigationBar appearance] setTranslucent:NO]stürzt die App mit einem NSInvalidArgumentExceptionFehler ab. Verwenden [self.navigationController.navigationBar setTranslucent:NO]oder deaktivieren Sie die Transparenz mithilfe von IB.
Sam
1
UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
Schnelle
103

Um die Hintergrundfarbe und nicht den Farbton zu ändern, funktioniert der folgende Code:

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];
LJ1
quelle
3
Dies sollte die akzeptierte Antwort sein, funktioniert perfekt für iOS7.
Joshuahornby10
Richtige Antwort für iOS 7. Ich arbeite für mich.
LondonGuy
Die Transluzenz ist die Voraussetzung, damit dies funktioniert. Da die akzeptierte Antwort dies nicht enthält, sollte dies die akzeptierte Antwort sein.
Tristan Warner-Smith
3
Zur Verdeutlichung gilt die akzeptierte Antwort für AppDelegate und für den View Controller.
Dean
@ Dean ist richtig. Die akzeptierte Antwort wird für neu erstellte wirksam UIViewControllers, während diese bei jedem Aufruf Effekte anzeigt.
Aramusss
18

Dafür in iOS 7:

[[UINavigationBar appearance] setBarTintColor:myColor];
Lasse Koje
quelle
15

Schnelle Syntax:

    UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color

Ich habe das gerade in das AppDelegate didFinishLaunchingWithOptions eingefügt und es bleibt in der gesamten App erhalten

Dustin Williams
quelle
8

Swift :

self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false
Hemang
quelle
6

Sie können dies einfach mit Xcode 6.3.1 tun. Wählen Sie Ihre Navigationsleiste in der Dokumentübersicht aus. Wählen Sie den Attributinspektor aus. Deaktivieren Sie Translucent. Stellen Sie die Balkentönung auf die gewünschte Farbe ein. Getan!

ronm333
quelle
Vielen Dank, ich habe viele Referenzen gefunden, wie man das in ObjC und schnell macht, aber niemand erwähnt, dass es in IB verfügbar ist
Nick
3

Wie die anderen Antworten erwähnen, können Sie verwenden setTintColor: , aber Sie möchten eine Volltonfarbe und dies ist nicht möglich, um die Farbtonfarbe AFAIK einzustellen.

Die Lösung besteht darin, programmgesteuert ein Bild zu erstellen und dieses Bild als Hintergrundbild für alle Navigationsleisten über festzulegen UIAppearance. Über die Größe des Bildes bin ich mir nicht sicher, ob ein 1x1-Pixel-Bild funktionieren würde oder ob Sie die genaue Größe der Navigationsleiste benötigen. Überprüfen Sie die zweite Antwort auf diese Frage, um zu sehen, wie das Bild erstellt wird.

Als Ratschlag möchte ich den App-Delegierten nicht mit solchen Dingen "überladen". Ich neige dazu, eine Klasse AppearanceConfigurationmit nur einer öffentlichen Methode zu erstellen , configureAppearancein der ich alle gewünschten UIAppearance-Inhalte festlege und diese Methode dann vom App-Delegaten aufrufe.

e1985
quelle
2

Sie können die Hintergrundfarbe von UINavigation mithilfe dieses Codes in einem beliebigen Ansichts-Controller festlegen

self.navigationController.navigationBar.backgroundColor = [UIColor colorWithRed:10.0f/255.0f green:30.0f/255.0f blue:200.0f/255.0f alpha:1.0f];
amar
quelle
2

In Swift 4.2 und Xcode 10.1

Sie können die Farbe Ihrer Navigationsleiste von Ihrem AppDelegate direkt in Ihr gesamtes Projekt ändern.

In didFinishLaunchingWithOptions launchOptions:Schreib unten an Codezeilen

UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)

Hier

tintColor dient zum Einstellen von Hintergrundbildern wie Zurück-Schaltflächen- und Menüzeilenbildern usw. (Siehe unten links und rechts im Menübild)

barTintColor ist für die Hintergrundfarbe der Navigationsleiste

Wenn Sie eine bestimmte Farbe für die Navigationsleiste des View Controllers festlegen möchten, schreiben Sie den folgenden Code ein viewDidLoad()

//Add navigation bar colour
navigationController?.navigationBar.barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)
navigationController?.navigationBar.tintColor = UIColor.white

Geben Sie hier die Bildbeschreibung ein

iOS
quelle
-1

Der Farbcode ist hier das Problem. Verwenden Sie statt 195/255 0,7647 oder 195.f / 255.f. Das Problem besteht darin, dass der Float nicht ordnungsgemäß konvertiert wird. Versuchen Sie es mit dem exakten Float-Wert.

Ganka
quelle