Ändern Sie die Farbe der Schaltfläche Zurück in der Navigationsleiste


192

Ich versuche, die Farbe der Schaltfläche "Einstellungen" in "Weiß" zu ändern, kann sie jedoch nicht ändern.

Ich habe beide ausprobiert:

navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()

aber keine Änderung, es sieht immer noch so aus:

Geben Sie hier die Bildbeschreibung ein

Wie mache ich diesen Knopf weiß?

Antworten:


283

Sie können die globale Farbtonfarbe in Ihrem Storyboard ändern, indem Sie auf eine leere Stelle auf der Tafel klicken und in der rechten Symbolleiste "Dateiinspektor anzeigen" auswählen. Unten in der Symbolleiste wird die Option "Globaler Farbton" angezeigt.

Globale Farbtonoption im Storyboard


7
woah .. Schöner Fund!. Wissen Sie, wie man das programmgesteuert macht?
Paul Lehn

10
Toller Fund, aber wenn Sie den globalen Farbton in Weiß ändern (gemäß der ursprünglichen Frage), werden auch Dinge wie Indikatoren für die Offenlegung von Details in der Tabellenansicht in Weiß geändert, wodurch sie in der betreffenden Tabelle unsichtbar werden.
Mike Fischer

1
Hinzufügen zu Mikes Problemen: Mit diesem Steuerelement werden auch alle Textschaltflächen in dieser Farbe angezeigt. Sie müssen sie daher entweder manuell auf eine Farbe einstellen (dh offensichtlich keine Standardfarben) oder einfach eine andere Methode verwenden.
Sirenen

4
Dies ist zwar eine schnelle und einfache Lösung, führt jedoch zu anderen Problemen, wenn die Farbe weiß ist / mit dem Hintergrund übereinstimmt. Wenn Sie über Textfelder verfügen, wird der Cursor nicht wahrgenommen, sodass der Benutzer den Eindruck hat, dass er nicht in ein Textfeld schreiben kann, da der Cursor nicht sichtbar ist.
Jose Ramirez

5
@ PaulLehn Um dies programmgesteuert zu tun, AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)können Sie schreiben:self.window!.tintColor = .yourColor
mmika1000

205

Dieser Code ändert die Pfeilfarbe

self.navigationController.navigationBar.tintColor = UIColor.whiteColor();

Wenn dies nicht funktioniert, verwenden Sie den folgenden Code:

self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = UIColor.whiteColor()

Swift 3 Notizen

UIColor.whiteColor() und ähnliche wurden vereinfacht UIColor.white

Außerdem wurden viele zuvor implizite Optionen in explizit geändert, sodass Sie möglicherweise Folgendes benötigen:

self.navigationController?.navigationBar =

7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()arbeitete für mich (Swift 2.2)
Mike Fischer

self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor () arbeitete für mich (Swift 3)
Ajay.km

Können Sie erklären, warum UIBarStyle.Black verwendet wird?
mmika1000

Bitte aktualisieren: self.navigationController? .NavigationBar.tintColor =
mohonish

1
es ändert nur den Pfeil, der hintere Text bleibt in Xcode 11
jeff ayan


55

Sie sollten dies verwenden:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white

Dadurch wurde der Knopf weiß, aber die Hintergrundfarbe wurde viel heller. Wissen Sie, wie Sie dem Hintergrund der Leiste wieder die volle Farbe verleihen können?
Brandon Evans

Dies ist die richtige Antwort. Der Balken wird lila, indem Sie die barTintColor- und die Titel- / Balkenschaltflächen weiß einstellen.
Zirinisp

35

Schnell

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }

1
Verwenden Sie in schnell 3.
Deepak Tagadiya

Sag mir auch, welche schnelle Version du verwenden kannst?
Deepak Tagadiya

Und welche Klasse / Datei / VC schreibt diesen Code im Projekt?
Deepak Tagadiya

Zu Beginn der Funktion setCloseButton (), die in viewWillAppear aufgerufen wird.
Jayprakash Dubey

Schreiben Sie in die Datei NextViewController.swift und in viewDidLoad ().
Deepak Tagadiya

20

Sie können wie diese verwenden. Legen Sie es hinein AppDelegate.swift.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        UINavigationBar.appearance().translucent = false
        UINavigationBar.appearance().barTintColor = UIColor(rgba: "#2c8eb5")
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]

        return true
    }

20

Swift 4.2

Komplettes App-Thema ändern

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        UINavigationBar.appearance().tintColor = .white

        return true
    }

Ändern Sie den spezifischen Controller

let navController = UINavigationController.init(rootViewController: yourViewController) 
navController.navigationBar.tintColor = .red

present(navController, animated: true, completion: nil)

Es ändert die Farbe für die gesamte Anwendung. Was ist, wenn ich es für einen bestimmten Bildschirm / eine bestimmte ändern muss UINavigationController?
Vyachaslav Gerchicov

@VyachaslavGerchicov obige Antwort ist für das vollständige App-Thema, wenn Sie einen bestimmten Controller ändern möchten. Gehen Sie wie folgt vor: Lassen Sie navController = UINavigationController.init (rootViewController: yourViewController) navController.navigationBar.tintColor = .red
AiOsN

Wenn Sie mit iOS 13 arbeiten, verwenden Sie didFinishLaunchingWithOptions nicht mehr. Es wurde nach SceneDelegate verschoben.
JBarros35

15

In Swift3 die Schaltfläche Zurück auf red.

self.navigationController?.navigationBar.tintColor = UIColor.red

Dies wird die Navigationsleiste setzen, nicht die Leistenschaltfläche
Carlodonz

1
Ja, das war die Frage.
Vincent

"Ändern Sie die Farbe der Zurück- Schaltfläche in der Navigationsleiste"
Carlodonz

Dies war die einzige Methode, die bei mir funktioniert hat. Momentan scheint etwas mit Apples Implementierung nicht
Dave Y

13

In Swift 4 können Sie dieses Problem beheben, indem Sie:

let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black

8

Swift 3

Die am besten bewertete Antwort ist für Swift 3 nicht korrekt.

Geben Sie hier die Bildbeschreibung ein

Der richtige Code zum Ändern der Farbe lautet:

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

Wenn Sie die Farbe ändern möchten, ändern Sie UIColor.white oben in die gewünschte Farbe


Dies war die einzige Methode, die bei mir funktioniert hat. Momentan scheint etwas mit Apples Implementierung nicht
Dave Y

7

Alle Antworten stehen im UINavigationBar.appearance().tintColorWiderspruch zur Dokumentation von Apple in UIAppearance.h.

Hinweis für iOS7: Unter iOS7 wurde die tintColorEigenschaft verschoben UIViewund weist nun ein spezielles vererbtes Verhalten auf, das in beschrieben ist UIView.h. Dieses geerbte Verhalten kann mit dem Erscheinungs-Proxy in Konflikt stehen und ist daher tintColorjetzt mit dem Erscheinungs-Proxy nicht mehr zulässig.

In Xcode müssen Sie mit der Befehlstaste auf jede Eigenschaft klicken, die Sie mit dem Erscheinungs-Proxy verwenden möchten, um die Header-Datei zu überprüfen und sicherzustellen, dass die Eigenschaft mit Anmerkungen versehen ist UI_APPEARANCE_SELECTOR .

Der richtige Weg, um die Navigationsleiste lila und den Titel und die Schaltflächen in der gesamten App über den Erscheinungs-Proxy weiß zu färben, ist:

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

Beachten Sie, dass dies UIBarButtonItemkeine Unterklasse von UIViewsondern ist NSObject. So ist estintColor Eigenschaft nicht die geerbte tintColoraus UIView.

Wird leider UIBarButtonItem.tintColornicht mit kommentiert UI_APPEARANCE_SELECTOR- aber das scheint mir ein Dokumentationsfehler zu sein. Die Antwort von Apple Engineering in diesem Radar besagt, dass es unterstützt wird.


UINavigationBar.appearance (). LargeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] // also
Guilherme

6
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

Dieser Ausschnitt macht die Magie. Ändern Sie es anstelle von redColor nach Ihren Wünschen.


6

Verwenden Sie diesen Code in der AppDelegateKlasse innerhalb von didFinishLaunchingWithOptions.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

UINavigationBar.appearance().tintColor = .white

}

4

Versuchen wir diesen Code:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.whiteColor()  // Back buttons and such
    navigationBarAppearace.barTintColor = UIColor.purpleColor()  // Bar's background color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title's text color

    self.window?.backgroundColor = UIColor.whiteColor()
    return true
}

Vielen Dank, Sir
Arpit B Parekh

4

in Swift 2.0 verwenden

self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();

4

Wenn Sie die Schaltfläche "Zurück" bereits in Ihrem Ansichts-Controller "Einstellungen" haben und die Farbe der Zurück-Schaltfläche im Ansichts-Controller "Zahlungsinformationen" in etwas anderes ändern möchten, können Sie dies in den Ansichts-Controllern "Einstellungen" tun, um sich auf einen solchen Übergang vorzubereiten ::

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "YourPaymentInformationSegue"
    {
        //Make the back button for "Payment Information" gray:
        self.navigationItem.backBarButtonItem?.tintColor = UIColor.gray               
    }
}

3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Dies funktioniert für mich, iOS 9.0+


2

Fügen Sie der Funktion didFinishLaunchingWithOptions in AppDelegate.swift den folgenden Code hinzu

var navigationBarAppearace = UINavigationBar.appearance()

navigationBarAppearace.tintColor = uicolorFromHex(0xffffff) // White color
navigationBarAppearace.barTintColor = uicolorFromHex(0x034517) // Green shade

// change navigation item title color
navigationBarAppearace.titleTextAttributes =[NSForegroundColorAttributeName:UIColor.whiteColor()]

Dieser Code gibt mir den folgenden Fehler: "Verwendung des ungelösten Bezeichners 'uicolorFromHex'" Kann mir jemand helfen, das zu lösen?
Jonathan3087

wahrscheinlich eine Erweiterung für UIColor. Sie können nach Stackoverflow suchen, um eine Erweiterung zu erstellen.
KvdLingen

2

Für Swift 2.0, um die Änderung zu Navigationsleiste Tönungsfarbe , Titeltext und Zurück - Taste Tönungsfarbe unter Verwendung der folgenden in AppDelegate.swift geändert

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

  // Override point for customization after application launch.


    //Navigation bar tint color change

    UINavigationBar.appearance().barTintColor = UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 0.5)

    //Back button tint color change

    UINavigationBar.appearance().barStyle = UIBarStyle.Default
    UINavigationBar.appearance().tintColor =  UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1)

    //Navigation Menu font tint color change

    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1), NSFontAttributeName: UIFont(name: "OpenSans-Bold", size: 25)!]//UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 1.0)

    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent


    return true
}

2

Ich bin mir nicht sicher, warum niemand dies erwähnt hat ... aber ich habe genau das getan, was Sie in meinem getan haben viewDidLoad... und es hat nicht funktioniert. Dann habe ich meinen Code eingegeben viewWillAppearund alles hat funktioniert.

Die obige Lösung besteht darin, ein einzelnes BarbuttonItem zu ändern . Wenn Sie die Farbe für jede Navigationsleiste in Ihrem Code ändern möchten, folgen Sie dieser Antwort .

Grundsätzlich ist das Ändern der Klasse selbst mit appearance()einer globalen Änderung aller Instanzen dieser Ansicht in Ihrer App. Mehr dazu hier


1

Sie haben eine Wahl, verstecken Sie Ihren Zurück-Knopf und machen Sie es mit sich selbst. Stellen Sie dann die Farbe ein.

Ich habe das gemacht:

self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()

1
Bei der Frage ging es speziell um die Gestaltung des linken Navigationselements. Dies kommt der direkten Beantwortung der Frage am nächsten.
Handwerk

0

Es wird mit dieser Zeile in - (void) viewDidLoad gelöst:

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;

(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
DengApro

0

Sie sollten diese Zeile hinzufügen

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black

0

Ich bevorzuge einen benutzerdefinierten NavigationController, anstatt eine globale Benutzeroberfläche festzulegen oder ViewController einzufügen.

Hier ist meine Lösung


class AppNavigationController : UINavigationController {

  override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
  }

  override func viewWillAppear(_ animated: Bool) {

  }

}
extension AppNavigationController : UINavigationControllerDelegate {

  func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let backButtonItem = UIBarButtonItem(
      title: "   ",
      style: UIBarButtonItem.Style.plain,
      target: nil,
      action: nil)
    backButtonItem.tintColor = UIColor.gray
    viewController.navigationItem.backBarButtonItem = backButtonItem
  }

  func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {

  }

}

Außerdem müssen Sie sich nicht mit Apple Api wie EKEventEditViewController , PickerViewController usw. herumschlagen , wenn Sie globale Einstellungen verwendenUIBarButtonItem.appearance().tintColor = .white


0
    self.navigationController?.navigationBar.tintColor = UIColor.black // to change the all text color in navigation bar or navigation 
    self.navigationController?.navigationBar.barTintColor = UIColor.white // change the navigation background color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.black] // To change only navigation bar title text color
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.