Ändern der Farbe der Navigationsleiste in Swift

240

Ich verwende eine Auswahlansicht, damit der Benutzer das Farbthema für die gesamte App auswählen kann.

Ich plane, die Farbe der Navigationsleiste, des Hintergrunds und möglicherweise der Registerkartenleiste zu ändern (falls dies möglich ist).

Ich habe nachgeforscht, wie das geht, kann aber keine Swift-Beispiele finden. Könnte mir bitte jemand ein Beispiel für den Code geben, den ich zum Ändern der Farbe der Navigationsleiste und der Textfarbe der Navigationsleiste verwenden müsste?

Die Auswahlansicht ist eingerichtet. Ich suche nur nach dem Code, um die Farben der Benutzeroberfläche zu ändern.

user3746428
quelle

Antworten:

524

Navigationsleiste:

navigationController?.navigationBar.barTintColor = UIColor.green

Ersetzen Sie greenColor durch die gewünschte UIColor. Wenn Sie möchten, können Sie auch ein RGB verwenden.

Text der Navigationsleiste:

navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.orange]

Ersetzen Sie orangeColor durch eine beliebige Farbe.

Tab-Leiste:

tabBarController?.tabBar.barTintColor = UIColor.brown

Tab-Leiste Text:

tabBarController?.tabBar.tintColor = UIColor.yellow

Ersetzen Sie bei den letzten beiden Farben brownColor und yellowColor durch die Farbe Ihrer Wahl.

trompeter201
quelle
Vielen Dank! Ich war nicht weit weg von dem, was ich versuchte, aber ich hatte die Dinge nicht in der richtigen Reihenfolge.
user3746428
Ich bin mir nicht sicher. Wenn Sie einen Push-Segue im Gegensatz zu einem Modal verwenden, sollte es dieselbe Navigationsleiste sein, aber ich bin mir nicht ganz sicher. Es tut uns leid.
Trompeter201
2
Nach dem Update auf die neueren Xcode-Betas funktioniert das Festlegen der Titeltextfarbe nicht mehr. titleTextAttributes ist in Swift nicht verfügbar. Irgendwelche Ideen?
user3746428
1
Könnten Sie eine neue Frage öffnen und vielleicht darauf verlinken? Der Chat ist nicht der beste Ort für so etwas.
Trompeter201
3
Ich habe festgestellt, dass ich NSForegroundColorAttributeName als Attributnamen verwenden muss, aber ansonsten funktioniert es hervorragend.
Jake Hall
90

Hier sind einige sehr grundlegende Anpassungen des Erscheinungsbilds, die Sie app-weit anwenden können:

UINavigationBar.appearance().backgroundColor = UIColor.greenColor()
UIBarButtonItem.appearance().tintColor = UIColor.magentaColor()
//Since iOS 7.0 UITextAttributeTextColor was replaced by NSForegroundColorAttributeName
UINavigationBar.appearance().titleTextAttributes = [UITextAttributeTextColor: UIColor.blueColor()]
UITabBar.appearance().backgroundColor = UIColor.yellowColor();

Weitere Informationen zur UIAppearanceAPI in Swift finden Sie hier: https://developer.apple.com/documentation/uikit/uiappearance

Keenle
quelle
Wie würde ich dies verwenden, um die Farbe der Navigationsleiste für die gesamte App zu ändern? Im Moment habe ich nur: self.navigationController.navigationBar.barTintColor = UIColor.newBlueColor () und dies ändert natürlich nur die Farbe der Navigationsleiste des View Controllers, in dem sich der Code befindet. Wie kann ich damit alle Navigationsleisten ändern? Ich habe versucht, UINavigationBar.appearance (). BackgroundColor = UIColor.newBlueColor () zu verwenden, aber es scheint nichts zu tun.
user3746428
4
Fügen Sie die oben genannten Methoden der AppDelegate.swift-Funktionsanwendung ein (Anwendung: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {// Über Code platzieren}
Badrinath
7
Verwenden Sie barTintColor anstelle von backgroundColor. UINavigationBar.appearance (). BarTintColor = UIColor.greenColor ()
Michael Peterson
@Keenle Ich bin ein bisschen verwirrt ... Warum ändert das Ändern der Hintergrundfarbe der UINavigationBar über die Darstellungs-API ihre Farbe nicht vollständig? Ich habe versucht, die Hintergrundfarbe auf Blau zu setzen, und es gab mir einen seltsamen Farbton von Purpurblau ...
Fja
58

Aktualisiert für Swift 3, 4, 4.2, 5+

// setup navBar.....
UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
UINavigationBar.appearance().isTranslucent = false

Swift 4

UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UINavigationBar.appearance().isTranslucent = false

Swift 4.2, 5+

UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
UINavigationBar.appearance().isTranslucent = false

Überprüfen Sie auch hier: https://github.com/hasnine/iOSUtilitiesSource

Jamil Hasnine Tamim
quelle
Swift 4.2: NSAttributedString.Key.foregroundColor
Kasra Babaei
Wenn Sie die Farbtonfarbe auf Weiß anstatt auf Bartintcolor einstellen, wird die Originalfarbe angezeigt. Toll!
NickCoder
@ NickCoder schätzen es. :) Überprüfen Sie auch meine Bibliothek: github.com/hasnine/iOSUtilitiesSource
Bibliothek
52
UINavigationBar.appearance().barTintColor = UIColor(red: 46.0/255.0, green: 14.0/255.0, blue: 74.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()]

Fügen Sie diese Zeile einfach didFinishLaunchingWithOptionsin Ihren Code ein.

Mohit Tomar
quelle
Ich habe dies mit RGB versucht und es funktioniert nicht, egal wo ich es platziere.
Nathan McKaskle
@NathanMcKaskle Überprüfen Sie Ihr RGB, es sollte im Format "xx / 250.0f" vorliegen.
Mohit Tomar
Wird in didFinishLaunchingWithOptions verwendet und hat perfekt funktioniert. Inside viewDidLoad funktioniert nicht perfekt.
Touhid
26

In AppDelegate hat dies das Format der NavBar global geändert und die untere Zeile / den Rand (der für die meisten Menschen ein Problembereich darstellt) entfernt, um Ihnen das zu geben, wonach Sie und andere meiner Meinung nach suchen:

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

    UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default)
    UINavigationBar.appearance().shadowImage = UIImage()
    UINavigationBar.appearance().tintColor = UIColor.whiteColor()
    UINavigationBar.appearance().barTintColor = Style.SELECTED_COLOR
    UINavigationBar.appearance().translucent = false
    UINavigationBar.appearance().clipsToBounds = false
    UINavigationBar.appearance().backgroundColor = Style.SELECTED_COLOR
    UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : (UIFont(name: "FONT NAME", size: 18))!, NSForegroundColorAttributeName: UIColor.whiteColor()] }

Dann können Sie eine Constants.swift einrichten Datei einrichten. Darin enthalten ist eine Style-Struktur mit Farben und Schriftarten usw. Anschließend können Sie jedem ViewController eine tableView / pickerView hinzufügen und das Array "availableThemes" verwenden, damit der Benutzer themeColor ändern kann.

Das Schöne daran ist, dass Sie für jede Farbe eine Referenz in Ihrer gesamten App verwenden können. Diese wird basierend auf dem vom Benutzer ausgewählten "Thema" aktualisiert. Ohne eine Referenz wird standardmäßig das Thema1 () verwendet:

import Foundation
import UIKit

struct Style {


static let availableThemes = ["Theme 1","Theme 2","Theme 3"]

static func loadTheme(){
    let defaults = NSUserDefaults.standardUserDefaults()
    if let name = defaults.stringForKey("Theme"){
        // Select the Theme
        if name == availableThemes[0]   { theme1()  }
        if name == availableThemes[1]   { theme2()  }
        if name == availableThemes[2]   { theme3()  }
    }else{
        defaults.setObject(availableThemes[0], forKey: "Theme")
        theme1()
    }
}

 // Colors specific to theme - can include multiple colours here for each one
static func theme1(){
   static var SELECTED_COLOR = UIColor(red:70/255, green: 38/255, blue: 92/255, alpha: 1) }

static func theme2(){
    static var SELECTED_COLOR = UIColor(red:255/255, green: 255/255, blue: 255/255, alpha: 1) }

static func theme3(){
    static var SELECTED_COLOR = UIColor(red:90/255, green: 50/255, blue: 120/255, alpha: 1) } ...
David West
quelle
2
Danke Mann, deine Antwort hat mir wirklich geholfen, zumindest für mich. Ich habe den ersten Teil davon benutzt und es war großartig und sehr nützlich
Ameer Fares
1
Vielen Dank Mann, ich habe jede Antwort hier ausprobiert und keine von ihnen hat funktioniert außer Ihrer: D
Ronak Shah
19

Dazu im Storyboard (Interface Builder Inspector)

Mithilfe von IBDesignablekönnen wir dem Interface Builder Inspector weitere Optionen hinzufügen UINavigationControllerund diese im Storyboard optimieren. Fügen Sie Ihrem Projekt zunächst den folgenden Code hinzu.

@IBDesignable extension UINavigationController {
    @IBInspectable var barTintColor: UIColor? {
        set {
            guard let uiColor = newValue else { return }
            navigationBar.barTintColor = uiColor
        }
        get {
            guard let color = navigationBar.barTintColor else { return nil }
            return color
        }
    }
}

Stellen Sie dann einfach die Attribute für den Navigationscontroller im Storyboard ein.

Geben Sie hier die Bildbeschreibung ein

Dieser Ansatz kann auch verwendet werden, um die Farbe des Navigationsleisten-Texts aus dem Storyboard zu verwalten:

@IBInspectable var barTextColor: UIColor? {
  set {
    guard let uiColor = newValue else {return}
    navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: uiColor]
  }
  get {
    guard let textAttributes = navigationBar.titleTextAttributes else { return nil }
    return textAttributes[NSAttributedStringKey.foregroundColor] as? UIColor
  }
}
Fangming
quelle
18

Swift 4:

Perfekt funktionierender Code zum Ändern des Erscheinungsbilds der Navigationsleiste auf Anwendungsebene.

Geben Sie hier die Bildbeschreibung ein

// MARK: Navigation Bar Customisation

// To change background colour.
UINavigationBar.appearance().barTintColor = .init(red: 23.0/255, green: 197.0/255, blue: 157.0/255, alpha: 1.0)

// To change colour of tappable items.
UINavigationBar.appearance().tintColor = .white

// To apply textAttributes to title i.e. colour, font etc.
UINavigationBar.appearance().titleTextAttributes = [.foregroundColor : UIColor.white,
                                                    .font : UIFont.init(name: "AvenirNext-DemiBold", size: 22.0)!]
// To control navigation bar's translucency.
UINavigationBar.appearance().isTranslucent = false

Viel Spaß beim Codieren!

Gaurav Singla
quelle
16
UINavigationBar.appearance().barTintColor

arbeitete für mich

Asbar
quelle
15

SWIFT 4 - Reibungsloser Übergang (beste Lösung):

Wenn Sie von einem Navigationscontroller zurückkehren und auf dem Navigationscontroller, den Sie verwendet haben, eine andere Farbe einstellen müssen

override func willMove(toParentViewController parent: UIViewController?) {
    navigationController?.navigationBar.barTintColor = .white
    navigationController?.navigationBar.tintColor = Constants.AppColor
}

anstatt es in viewWillAppear zu platzieren, ist der Übergang sauberer.

SWIFT 4.2

override func willMove(toParent parent: UIViewController?) {
    navigationController?.navigationBar.barTintColor = UIColor.black
    navigationController?.navigationBar.tintColor = UIColor.black
}
Ricks
quelle
11

In Swift 4

Sie können die Farbe der Navigationsleiste ändern. Verwenden Sie einfach das folgende Code-Snippet inviewDidLoad()

Farbe der Navigationsleiste

self.navigationController?.navigationBar.barTintColor = UIColor.white

Textfarbe der Navigationsleiste

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.purple]

Für die Navigationsleiste mit großen Titeln für iOS 11 müssen Sie die largeTitleTextAttributesEigenschaft verwenden

self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.purple]
Vinoth Vino
quelle
9

Die appearance()Funktion funktioniert bei mir nicht immer. Daher ziehe ich es vor, ein NC-Objekt zu erstellen und seine Attribute zu ändern.

var navBarColor = navigationController!.navigationBar
navBarColor.barTintColor =
    UIColor(red:  255/255.0, green: 0/255.0, blue: 0/255.0, alpha: 100.0/100.0)
navBarColor.titleTextAttributes =
    [NSForegroundColorAttributeName: UIColor.whiteColor()]

Auch wenn Sie ein Bild anstelle von nur Text hinzufügen möchten, funktioniert dies ebenfalls

var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 70, height: 70))
imageView.contentMode = .ScaleAspectFit

var image = UIImage(named: "logo")
imageView.image = image
navigationItem.titleView = imageView
GuiSoySauce
quelle
Auf diese Weise konnte ich die Farbe von self.navigationController? .navigationBar.topItem? .title ändern. Danke.
Oguzhan
8

Verwenden Sie die Darstellungs-API und die Farbe barTintColor.

UINavigationBar.appearance().barTintColor = UIColor.greenColor()
Michael Peterson
quelle
4

iOS 8 (schnell)

let font: UIFont = UIFont(name: "fontName", size: 17)   
let color = UIColor.backColor()
self.navigationController?.navigationBar.topItem?.backBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName: color], forState: .Normal)
Lange Pham
quelle
4

Wenn Sie den Navigationscontroller angepasst haben, können Sie den obigen Codeausschnitt verwenden. In meinem Fall habe ich also folgende Codeteile verwendet.

Swift 3.0, XCode 8.1-Version

navigationController.navigationBar.barTintColor = UIColor.green

Text der Navigationsleiste:

navigationController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]

Es sind sehr hilfreiche Gespräche.

Bogdan Dimitrov Filov
quelle
4

Swift 4, iOS 12 und Xcode 10 Update

Setzen Sie einfach eine Zeile ein viewDidLoad()

navigationController?.navigationBar.barTintColor = UIColor.red
Xcodian Solangi
quelle
3

In Swift 2

Zum Ändern der Farbe in der Navigationsleiste,

navigationController?.navigationBar.barTintColor = UIColor.whiteColor()

Zum Ändern der Farbe in der Elementnavigationsleiste,

navigationController?.navigationBar.tintColor = UIColor.blueColor()

oder

navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blueColor()]
Riccardo Caroli
quelle
3

Swift 3

UINavigationBar.appearance().barTintColor = UIColor(colorLiteralRed: 51/255, green: 90/255, blue: 149/255, alpha: 1)

Dadurch wird die Farbe Ihrer Navigationsleiste wie die Farbe der Facebook-Leiste festgelegt :)

Sazzad Hissain Khan
quelle
3

Swift 3 und Swift 4 kompatibler Xcode 9

Eine bessere Lösung, um eine Klasse für allgemeine Navigationsleisten zu erstellen

Ich habe 5 Controller und jeder Controller-Titel wird in orange Farbe geändert. Da jeder Controller 5 Navigations-Controller hat, musste ich jede einzelne Farbe entweder vom Inspektor oder vom Code ändern.

Also habe ich eine Klasse erstellt, anstatt jede Navigationsleiste von Code zu ändern. Ich habe diese Klasse einfach zugewiesen und sie hat bei allen 5 Controller-Code-Wiederverwendungsfunktionen funktioniert. Sie müssen diese Klasse nur jedem Controller zuweisen und das wars.

import UIKit

   class NabigationBar: UINavigationBar {
      required init?(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
    commonFeatures()
 }

   func commonFeatures() {

    self.backgroundColor = UIColor.white;
      UINavigationBar.appearance().titleTextAttributes =     [NSAttributedStringKey.foregroundColor:ColorConstants.orangeTextColor]

 }


  }
Ourang-Zeb Khan
quelle
2

iOS 10 Swift 3.0

Wenn es Ihnen nichts ausmacht, schnelle Frameworks zu verwenden, ändern Sie mit UINeraida den Navigationshintergrund als UIColoroder HexColoroder UIImageund ändern Sie den Text der Navigationstaste programmgesteuert. Ändern Sie die Farbe des vollständigen Vordergrundtextes.

Zum UINavigationBar

    neraida.navigation.background.color.hexColor("54ad00", isTranslucent: false, viewController: self)
    
    //Change navigation title, backbutton colour
    
    neraida.navigation.foreground.color.uiColor(UIColor.white, viewController: self)
    
    //Change navigation back button title programmatically
    
    neraida.navigation.foreground.backButtonTitle("Custom Title", ViewController: self)
    
    //Apply Background Image to the UINavigationBar
    
    neraida.navigation.background.image("background", edge: (0,0,0,0), barMetrics: .default, isTranslucent: false, viewController: self)
Gemeinschaft
quelle
2

Swift 3

Einfacher Einzeiler, den Sie verwenden können ViewDidLoad()

//Change Color
    self.navigationController?.navigationBar.barTintColor = UIColor.red
//Change Text Color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
Codetard
quelle
2

Diese Version entfernt auch die 1px-Schattenlinie unter der Navigationsleiste:

Swift 5: Fügen Sie dies in Ihre AppDelegate didFinishLaunchingWithOptions ein

UINavigationBar.appearance().barTintColor = UIColor.black
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
UINavigationBar.appearance().shadowImage = UIImage()
tuvok
quelle
1

ich musste es tun

UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().barStyle = .Black
UINavigationBar.appearance().backgroundColor = UIColor.blueColor()

Andernfalls würde sich die Hintergrundfarbe nicht ändern

Guilherme Carvalho
quelle
1

Setzen Sie zuerst die isTranslucent-Eigenschaft von navigationBar auf false, um die gewünschte Farbe zu erhalten. Ändern Sie dann die Farbe der Navigationsleiste wie folgt:

@IBOutlet var NavigationBar: UINavigationBar!

NavigationBar.isTranslucent = false
NavigationBar.barTintColor = UIColor (red: 117/255, green: 23/255, blue: 49/255, alpha: 1.0)
Nupur Sharma
quelle
1

Stellen Sie sicher, dass der Schaltflächenstatus auf .normal eingestellt ist

extension UINavigationBar {

    func makeContent(color: UIColor) {
        let attributes: [NSAttributedString.Key: Any]? = [.foregroundColor: color]

        self.titleTextAttributes = attributes
        self.topItem?.leftBarButtonItem?.setTitleTextAttributes(attributes, for: .normal)
        self.topItem?.rightBarButtonItem?.setTitleTextAttributes(attributes, for: .normal)
    }
}

PS iOS 12, Xcode 10.1

Mazen Kasser
quelle
1
Danke dir. Ich habe stundenlang nach dieser topItemLösung gesucht . Es ist frustrierend, wie viele Änderungen Apple weiterhin an der Anwendung von Stilen auf die Navigation vornimmt.
App Dev Guy
1

Rufen Sie einfach diese Erweiterung auf und übergeben Sie die Farbe, die automatisch die Farbe der Navigationsleiste ändert

extension UINavigationController {

     func setNavigationBarColor(color : UIColor){
            self.navigationBar.barTintColor = color
        }
    }

In der Ansicht Didload oder in der Ansicht wird Aufruf angezeigt

self.navigationController? .setNavigationBarColor (Farbe: <# T ## UIColor #>)

Talha Rasool
quelle
1

Versuchen Sie dies in AppDelegate:

//MARK:- ~~~~~~~~~~setupApplicationUIAppearance Method
func setupApplicationUIAppearance() {

    UIApplication.shared.statusBarView?.backgroundColor = UIColor.clear

    var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    UINavigationBar.appearance().tintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    UINavigationBar.appearance().barTintColor =  UIColor.white
    UINavigationBar.appearance().isTranslucent = false

    let attributes: [NSAttributedString.Key: AnyObject]

    if DeviceType.IS_IPAD{
        attributes = [
            NSAttributedString.Key.foregroundColor: UIColor.white,
            NSAttributedString.Key.font: UIFont(name: "HelveticaNeue", size: 30)
            ] as [NSAttributedString.Key : AnyObject]
    }else{
        attributes = [
            NSAttributedString.Key.foregroundColor: UIColor.white
        ]
    }
    UINavigationBar.appearance().titleTextAttributes = attributes
}

iOS 13

func setupNavigationBar() {
    //        if #available(iOS 13, *) {
    //            let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
    //            let statusBar = UIView(frame: window?.windowScene?.statusBarManager?.statusBarFrame ?? CGRect.zero)
    //            statusBar.backgroundColor = #colorLiteral(red: 0.2784313725, green: 0.4549019608, blue: 0.5921568627, alpha: 1) //UIColor.init(hexString: "#002856")
    //            //statusBar.tintColor = UIColor.init(hexString: "#002856")
    //            window?.addSubview(statusBar)
    //            UINavigationBar.appearance().tintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    //            UINavigationBar.appearance().barTintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    //            UINavigationBar.appearance().isTranslucent = false
    //            UINavigationBar.appearance().backgroundColor = #colorLiteral(red: 0.2784313725, green: 0.4549019608, blue: 0.5921568627, alpha: 1)
    //            UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
    //        }
    //        else
    //        {
    UIApplication.shared.statusBarView?.backgroundColor = #colorLiteral(red: 0.2784313725, green: 0.4549019608, blue: 0.5921568627, alpha: 1)
    UINavigationBar.appearance().tintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    UINavigationBar.appearance().barTintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    UINavigationBar.appearance().isTranslucent = false
    UINavigationBar.appearance().backgroundColor = #colorLiteral(red: 0.2784313725, green: 0.4549019608, blue: 0.5921568627, alpha: 1)
    UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
    //        }
}

Erweiterungen

extension UIApplication {

var statusBarView: UIView? {
    if responds(to: Selector(("statusBar"))) {
        return value(forKey: "statusBar") as? UIView
    }
    return nil
}}
Tej Patel
quelle
1

Ich schreibe dies für diejenigen, die immer noch Probleme mit den Lösungen hier haben.

Ich verwende Xcode Version 11.4 (11E146). Derjenige, der für mich arbeitet, ist:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.tintColor = UIColor.black

ABER!, Wenn Sie die barTintColor im Storyboard auf einen anderen Wert als "Standard" setzen, haben diese 2 Codezeilen keine Auswirkung.

Seien Sie also vorsichtig und setzen Sie im Storyboard die Standardeinstellung barTintColor zurück. Oh Apple ...

Tomas Cordoba
quelle
Immer noch das gleiche Problem, obwohl die Farbtonfarbe auf Standard
geändert wurde
@ marika.daboja Alle Ihre Navigationscontroller im Storyboard sind auf Standardfarben eingestellt?
Tomas Cordoba
Hallo, ich habe nur 1 Navigations-Controller (plus 2 Table View-Controller). Die Farbtonfarbe der Navigationssteuerungsleiste ist auf "Standard" eingestellt. Code Ich muss diese Farbe aktualisieren, scheint keinen Einfluss darauf zu haben.
marika.daboja
@ marika.daboja stellen Sie sicher, dass navigationController nicht null ist. Und dass Sie diese Codezeilen in viewDidLoad ()
Tomas Cordoba
0

Fügen Sie diese Zeilen zu Ihrem AppDelegate in der Funktion didFinishLaunchingWithOptions hinzu:

Diese Zeile dient zum Hintergrund Ihrer Navigationsleiste.

UINavigationBar.appearance().barTintColor = .orange

Diese Zeile ist, wenn Ihr nicht durchscheinend zu falsch ist, zeigt sie weiße Farbe in der Navigation.

UINavigationBar.appearance().tintColor = .white

Diese Zeile ist für Ihre Texte und Symbole in der Navigationsleiste

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: Styles.textFirstColor]

Diese Zeile bringt uns dazu, alles auf Ihre Navigationsleiste zu bringen.

UINavigationBar.appearance().isTranslucent = false
Ali Qaderi
quelle