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.