Zmień kolor przycisku Wstecz na pasku nawigacyjnym


194

Próbuję zmienić kolor przycisku Ustawienia na biały, ale nie mogę go zmienić.

Próbowałem obu tych:

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

ale bez zmian, nadal wygląda to tak:

wprowadź opis zdjęcia tutaj

Jak sprawić, by ten przycisk był biały?

Odpowiedzi:


284

Możesz zmienić globalny kolor odcienia w swojej serii ujęć, klikając puste miejsce na planszy i wybierając na prawym pasku narzędzi „Pokaż inspektora plików”, a na dole paska narzędzi zobaczysz opcję „Globalny odcień”.

Opcja globalnego odcienia w serii ujęć


7
woah .. Fajne znalezisko !. czy wiesz jak to zrobić programowo?
Paul Lehn

10
Świetne znalezisko, ale zmiana globalnego odcienia na biały (zgodnie z pierwotnym pytaniem) spowoduje również zmianę takich elementów, jak wskaźniki ujawnienia szczegółów widoku tabeli na biały, co sprawi, że będą niewidoczne w danej tabeli.
Mike Fischer

1
Dodając do problemów Mike'a: ta kontrolka sprawia, że ​​wszystkie przyciski tekstowe mają ten kolor, więc albo musisz ustawić je ręcznie na kolor (tj. Oczywiście nie ma domyślnych kolorów), albo po prostu użyć innej metody.
Sirens,

4
Chociaż jest to szybkie i łatwe rozwiązanie, prowadzi do innych problemów, jeśli kolor jest biały / pasuje do tła. Jeśli masz pola tekstowe, kursor staje się niezauważalny, co sprawia, że ​​wygląda na użytkownika, jakby nie był w stanie pisać na polu tekstowym, ponieważ kursor nie jest widoczny.
Jose Ramirez

5
@PaulLehn Aby zrobić to programowo, AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)możesz napisać:self.window!.tintColor = .yourColor
mmika1000

206

Ten kod zmienia kolor strzałki

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

Jeśli to nie zadziała, użyj poniższego kodu:

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

Swift 3 Notes

UIColor.whiteColor() i podobne zostały uproszczone do UIColor.white

Ponadto wiele wcześniej niejawnych opcji zostało zmienionych na jawne, więc możesz potrzebować:

self.navigationController?.navigationBar =

7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()pracował dla mnie (Swift 2.2)
Mike Fischer

self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor () pracował dla mnie (Swift 3)
Ajay.km

Czy możesz wyjaśnić, dlaczego korzystać z UIBarStyle.Black?
mmika1000,

Proszę zaktualizować: self.navigationController? .NavigationBar.tintColor =
mohonish

1
zmienia tylko strzałkę, tylny tekst wciąż pozostaje taki sam w Xcode 11
Jeff Ayan


56

Powinieneś użyć tego:

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

Dzięki temu przycisk stał się biały, ale kolor tła był znacznie jaśniejszy. Czy wiesz, jak ponownie nadać kolorowi tła paska pełny kolor?
Brandon Evans

To jest poprawna odpowiedź. Zmieni kolor paska na fioletowy, ustawiając barTintColor i przyciski tytułu / paska na białe.
zirinisp

36

Szybki

 override func viewDidLoad() {
     super.viewDidLoad()

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

1
Użyj w swift 3.
Deepak Tagadiya,

powiedz mi także, której szybkiej wersji możesz użyć?
Deepak Tagadiya,

A która klasa / plik / vc zapisuje ten kod w projekcie?
Deepak Tagadiya,

Na początku funkcji setCloseButton (), która jest wywoływana w viewWillAppear.
Jayprakash Dubey,

napisz w pliku NextViewController.swift, napisz również w viewDidLoad ().
Deepak Tagadiya,

20

Możesz użyć takiego jak ten. Umieść to w środku 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

Szybki 4.2

Zmień kompletny motyw aplikacji

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

        UINavigationBar.appearance().tintColor = .white

        return true
    }

Zmień konkretny kontroler

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

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

zmienia kolor dla całej aplikacji. Co się stanie, jeśli będę musiał go zmienić dla konkretnego ekranu / konkretnego UINavigationController?
Vyachaslav Gerchicov

@VyachaslavGerchicov powyższa odpowiedź dotyczy pełnego motywu aplikacji, jeśli chcesz zmienić konkretny kontroler. Zrób coś takiego: pozwól navController = UINavigationController.init (rootViewController: yourViewController) navController.navigationBar.tintColor = .red
AiOsN

Jeśli korzystasz z iOS 13, nie używasz już didFinishLaunchingWithOptions, został on przeniesiony do SceneDelegate.
JBarros35,

15

W Swift3 , Aby ustawić przycisk Wstecz na red.

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

spowoduje to ustawienie paska nawigacji, a nie przycisku paska
carlodonz

1
Tak, to było pytanie.
Vincent

„Zmień kolor przycisku Wstecz na pasku nawigacyjnym”
carlodonz

To była jedyna metoda, która działała dla mnie. Coś wydaje się teraz zepsute w implementacji Apple ...
Dave Y

13

W Swift 4 możesz rozwiązać ten problem, używając:

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

Szybki 3

Najbardziej pozytywna odpowiedź nie jest poprawna dla Swift 3.

wprowadź opis zdjęcia tutaj

Prawidłowy kod do zmiany koloru to:

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

Jeśli chcesz zmienić kolor, zmień UIColor.white powyżej na żądany kolor


To była jedyna metoda, która działała dla mnie. Coś wydaje się teraz zepsute w implementacji Apple ...
Dave Y

7

Wszystkie odpowiedzi ustawione w UINavigationBar.appearance().tintColorkonflikcie z dokumentacją Apple w UIAppearance.h.

Uwaga dla iOS7: na iOS7 tintColorwłaściwość została przeniesiona do UIView, a teraz ma specjalne dziedziczone zachowanie opisane w UIView.h. To odziedziczone zachowanie może powodować konflikt z serwerem proxy wyglądu i dlatego tintColorjest teraz niedozwolone z serwerem proxy wyglądu.

W Xcode musisz kliknąć polecenie każdej właściwości, której chcesz używać z proxy wyglądu, aby sprawdzić plik nagłówka i upewnić się, że właściwość jest opatrzona adnotacją UI_APPEARANCE_SELECTOR .

Tak więc poprawnym sposobem pokolorowania paska nawigacyjnego na fioletowo oraz białego tytułu i przycisków w aplikacji za pośrednictwem wyglądu proxy jest:

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

Zauważ, że UIBarButtonItemnie jest to podklasa, UIViewale raczej NSObject. Więc jego tintColorwłaściwość nie jest dziedziczona tintColorodUIView .

Niestety UIBarButtonItem.tintColornie jest opatrzone adnotacjami UI_APPEARANCE_SELECTOR- ale wydaje mi się, że to błąd w dokumentacji. Odpowiedź firmy Apple Engineering na ten radar mówi, że jest obsługiwany.


UINavigationBar.appearance (). LargeTitleTextAttributes = [NSAttributString.Key.foregroundColor: UIColor.white] // również
Guilherme

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

Ten fragment działa magicznie. Zamiast czerwonego koloru zmień go na dowolny.


6

Użyj tego kodu w AppDelegateklasie wewnątrz didFinishLaunchingWithOptions.

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

UINavigationBar.appearance().tintColor = .white

}

4

Spróbujmy tego kodu:

 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
}

Dziękuję bardzo, proszę pana
Arpit B Parekh,

4

w szybkim użyciu 2.0

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

4

Jeśli masz już przycisk Wstecz w kontrolerze widoku „Ustawienia” i chcesz zmienić kolor przycisku Wstecz w kontrolerze widoku „Informacje o płatności” na coś innego, możesz to zrobić w kontrolerze widoku „Ustawienia” przygotuj się na taki segregator :

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];

To działa dla mnie, iOS 9.0+


2

Dodaj następujący kod do funkcji didFinishLaunchingWithOptions w AppDelegate.swift

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()]

Ten kod powoduje następujący błąd: „Użycie nierozwiązanego identyfikatora„ uicolorFromHex ”” Czy ktoś może mi pomóc w rozwiązaniu tego problemu?
jonathan3087

prawdopodobnie rozszerzenie dla UIColor. Możesz przeszukiwać stos, jak utworzyć rozszerzenie.
KvdLingen,

2

W przypadku Swift 2.0, aby zmienić kolor odcienia paska nawigacyjnego , tekst tytułu i kolor odcienia przycisku Wstecz zmieniono za pomocą następującego polecenia w AppDelegate.swift

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

Nie jestem pewien, dlaczego nikt o tym nie wspominał ... ale robiłem dokładnie to, co robiłeś w moim viewDidLoad... i to nie działało. Potem umieściłem mój kod viewWillAppeari wszystko działało.

Powyższe rozwiązanie polega na zmianie pojedynczego elementu paska. Jeśli chcesz zmienić kolor każdego paska nawigacji w kodzie, postępuj zgodnie z tą odpowiedzią .

Zasadniczo przejście na samą klasę za pomocą appearance()przypomina globalną zmianę we wszystkich instancjach tego widoku w aplikacji. Więcej informacji tutaj


1

Masz jeden wybór, aby ukryć przycisk Wstecz i zrobić to samemu. Następnie ustaw kolor.

Ja to zrobiłem:

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
Pytanie dotyczyło konkretnie stylizacji lewego elementu nawigacyjnego i jest to najbliższa bezpośrednia odpowiedź na pytanie.
rzemiosło

0

Zostanie to rozwiązane za pomocą tej linii w - (void) viewDidLoad:

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

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

0

Powinieneś dodać ten wiersz

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

0

Wolę niestandardowy NavigationController niż ustawianie globalnego interfejsu użytkownika lub wstawianie ViewController.

Oto moje rozwiązanie


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) {

  }

}

Ponadto nie musisz zadzierać z interfejsem Apple Api, takim jak EKEventEditViewController , PickerViewController itd., Jeśli używasz ustawień globalnych, takich jakUIBarButtonItem.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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.