Kolor paska nawigacyjnego IOS 7 i kolor strzałki

234

Chcę ustawić tło paska nawigacyjnego na czarny, a wszystkie kolory w nim białe .

Więc użyłem tego kodu:

[[UINavigationBar appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
      NSForegroundColorAttributeName,
      [UIFont fontWithName:@"Arial-Bold" size:0.0],
      NSFontAttributeName,
      nil]];

Ale przycisk z powrotem kolor tekstu , strzałka i przycisk bar wciąż domyślny kolor niebieski .
Jak zmienić te kolory jak na obrazku poniżej?

wprowadź opis zdjęcia tutaj

1110
źródło
1
spróbuj w AppDelegate, jeśli ([self.window odpowiadaToSelector: @selector (setTintColor :)]) self.window.tintColor = [UIColor whiteColor];
Evgeniy S
Co ciekawe, twój kod działał dla mnie świetnie (chciałem tylko zmienić kolor tekstu na biały). Dzięki!
William T. Mallard
Jakiego koloru niebieskiego używasz? Wygląda dobrze!
ebi
@ebi niektórzy ludzie nie lubią się dzielić. Wystarczy wybrać próbnik kolorów, aby go wybrać. Lub .... proszę bardzo: RGB: (18, 60, 133)
pnizzle

Odpowiedzi:

753

Zachowanie niektórych właściwości UINavigationBarzmieniło się z iOS 7 . Możesz zobaczyć na obrazku poniżej:

wprowadź opis zdjęcia tutaj


Dwa piękne linki, którymi chciałbym się z tobą podzielić. Aby uzyskać więcej informacji, możesz przejść przez te linki:

  1. Przewodnik przejścia do interfejsu użytkownika w systemie iOS 7 .
  2. Jak zaktualizować aplikację na iOS 7 .

Dokumentacja Apple dla barTintColor mówi:

Ten kolor jest domyślnie półprzezroczysty, chyba że ustawisz półprzezroczystą właściwość na NIE.

Przykładowy kod :

self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
[self.navigationController.navigationBar 
 setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
self.navigationController.navigationBar.translucent = NO;
Bhavin
źródło
Próbowałem: self.nav.navigationBar.tintColor = [UIColor whiteColor]; self.nav.navigationBar.barTintColor = [UIColor colorWithRed: 6.0 / 255,0 zielony: 12,0 / 255,0 niebieski: 19,0 / 255,0 alfa: 1,0]; Ale wszystko jest nadal niebieskie.
1110
2
Przeczytałem go wcześniej, ale zmieniam tylko tekst, ale nie i strzałkę. Nadal jest niebieski :(
1110
1
@ 1110: Spójrz na: Korzystanie z Tint Color
Bhavin,
2
@Chelsea: A co z tą linią? :[self.navigationController.navigationBar setTitleTextAttributes:@{[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName}];
Bhavin
4
Nie zapomnij, że możesz zmienić odcień dla całej aplikacji w appDelegate: [[wygląd UINavigationBar] setTintColor: [UIColor blackColor]];
simon_smiley
85

wprowadź opis zdjęcia tutaj

Zrozumienie tego zajęło mi około pół dnia, ale to zadziałało dla mnie. Wewnątrz rootViewController, który inicjuje nawigacjęController, umieściłem ten kod w mojej metodzie viewDidAppear:

//set bar color
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:85.0/255.0 green:143.0/255.0 blue:220.0/255.0 alpha:1.0]];
//optional, i don't want my bar to be translucent
[self.navigationController.navigationBar setTranslucent:NO];
//set title and title color
[self.navigationItem setTitle:@"Title"];
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];
//set back button color
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
//set back button arrow color
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

Mój pełny post na ten temat tutaj

John Riselvato
źródło
1
Jeśli masz problemy ze zmianą koloru strzałki wstecz, ten fragment rozwiąże problem. Jako minimum potrzebujesz ostatniej linii kodu dodanej do faktycznego rootViewController.
wstaje
Tak, John. Wczoraj zmarnowałem około godziny. Jednym problemem (dużym problemem) było to, że doktorzy okropnie wskazywali wszystkie możliwe atrybuty. Masz pomysł, gdzie mogą być wymienione? TY.
Alex Zavatone,
Dzięki @john Nakłada się na mój niestandardowy kolor. Czy możesz mi wyjaśnić, dlaczego?
Vaibhav Limbani,
Myślę, że powinieneś stworzyć nowe pytanie. Nie mogę ci powiedzieć, dlaczego nie widzę twojego kodu i tego, co robisz. @MacGeek
John Riselvato
3
Dzięki, zadziałało :). Ale UITextAttributeTextColor jest przestarzałe w iOS 7, teraz powinieneś używać NSForegroundColorAttributeName
YYamil 19.04.15
37

Swift3, ios 10

Aby globalnie przypisać kolor, w AppDelegate didFinishLaunchingWithOptions:

let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
UINavigationBar.appearance().titleTextAttributes = textAttributes

Swift 4, iOS 11

let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
UINavigationBar.appearance().titleTextAttributes = textAttributes
lifeisfoo
źródło
21

Odpowiedź Vin była dla mnie świetna. Oto to samo rozwiązanie dla programistów C # korzystających z Xamarin.iOS / MonoTouch:

var navigationBar = NavigationController.NavigationBar; //or another reference
navigationBar.BarTintColor = UIColor.Blue;
navigationBar.TintColor = UIColor.White;
navigationBar.SetTitleTextAttributes(new UITextAttributes() { TextColor = UIColor.White });
navigationBar.Translucent = false;
benhorgen
źródło
Nie wiedziałem, że możesz ustawić SetTitleTextAttributes tak, jak to zrobiłeś.
Brad Moore,
12

Swift / iOS8

let textAttributes = NSMutableDictionary(capacity:1)
textAttributes.setObject(UIColor.whiteColor(), forKey: NSForegroundColorAttributeName)
navigationController?.navigationBar.titleTextAttributes = textAttributes
LondonGuy
źródło
3
let textAttributes = NSMutableDictionary (pojemność: 1) jest teraz poprawnym wywołaniem inicjalizacji NSMutableDictionary.
juliensaad
12
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
Abo3atef
źródło
1
Podoba mi się to podejście, ponieważ można je ustawić w samej aplikacji AppDelegate i korzysta ono z proxy Appearance.
Niyog Ray
8

Aby zmienić kolor UINavigationBartytułu we właściwy sposób, użyj tego kodu:

[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];

UITextAttributeTextColorjest przestarzałe w najnowszej wersji iOS 7. Użyj NSForegroundColorAttributeNamezamiast tego.

aZtraL-EnForceR
źródło
5

Jeśli chcesz zmienić rozmiar i kolor tekstu tytułu , musisz zmienić NSDictionary titleTextAttributes dla 2 jego obiektów:

    self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:13.0],NSFontAttributeName,
                                                                  [UIColor whiteColor], NSForegroundColorAttributeName, 
                                                                  nil];
OhadM
źródło
2

Myślę, że poprzednie odpowiedzi są poprawne, to kolejny sposób na zrobienie tego samego. Udostępniam go tutaj innym osobom na wszelki wypadek, jeśli stanie się przydatny dla kogoś. Oto jak możesz zmienić kolor tekstu / tytułu dla paska nawigacyjnego w ios7:

UIColor *red = [UIColor colorWithRed:254.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:1.0];
NSMutableDictionary *navBarTextAttributes = [NSMutableDictionary dictionaryWithCapacity:1];
[navBarTextAttributes setObject:red forKey:NSForegroundColorAttributeName ];
self.navigationController.navigationBar.titleTextAttributes = navBarTextAttributes;
grepit
źródło
1

Wygląda na to, że Accessibilitykontrolki iOS Settingszastępują prawie wszystko, co próbujesz zrobić kolorowo do przycisków paska nawigacyjnego. Upewnij się, że masz wszystkie ustawienia do domyślnych pozycji ( wyłącz ustawienie zwiększania kontrastu, pogrubionego tekstu , kształtów przycisków itp.). W przeciwnym razie nic się nie zmieni. Gdy to zrobiłem, cały kod zmiany koloru zaczął działać zgodnie z oczekiwaniami. Być może nie musisz ich wszystkich wyłączać, ale nie kontynuowałem tego.

dziwnie
źródło
Dokładnie to, co mi się przydarzyło. Nie mogłem zmienić koloru odcienia elementu przycisku paska, gdy włączony był „Pogrubiony tekst”. To nie jest dobre. Teraz będę musiał użyć grafiki :-(
Ken
0

Swift 5 / iOS 13

Aby zmienić kolor tytułu w kontrolerze:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Mahdi Moqadasi
źródło