Ä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ß?

Brandon Evans
quelle

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

Etgar
quelle
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 =
Chamath Jeevan
quelle
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
93

Sehr einfach im Storyboard einzurichten:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

AlessandroDP
quelle
Perfekt, danke :)
Naresh Reddy M
55

Sie sollten dies verwenden:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white
Tiep Vu Van
quelle
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
 }
Deepak Tagadiya
quelle
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
    }
Mohammad Nurdin
quelle
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)
AiOsN
quelle
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
Vincent
quelle
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
Darrell Richards
quelle
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

Elon R.
quelle
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.

Jamie McDaniel
quelle
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.

Suresh Kumar Durairaj
quelle
6

Verwenden Sie diesen Code in der AppDelegateKlasse innerhalb von didFinishLaunchingWithOptions.

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

UINavigationBar.appearance().tintColor = .white

}
M. Nadeeshan
quelle
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
}
Mannam Brahmam
quelle
Vielen Dank, Sir
Arpit B Parekh
4

in Swift 2.0 verwenden

self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();
Riccardo Caroli
quelle
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               
    }
}
Despotovic
quelle
3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Dies funktioniert für mich, iOS 9.0+

Yuchen
quelle
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()]
Jayprakash Dubey
quelle
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
}
yazh
quelle
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

Honig
quelle
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()
Muhammad Ahmed Baig
quelle
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;
Ertaky
quelle
(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
DengApro
0

Sie sollten diese Zeile hinzufügen

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black
Monir Khlaf
quelle
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

tylerlantern
quelle
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
Vaibhav Gaikwad
quelle