Jak zmienić kolor tła UINavigationBar z AppDelegate


91

Wiem, jak zmienić UINavigationBarobraz tła, robiąc

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nabbar"] forBarMetrics:UIBarMetricsDefault];

i wiem, jak ustawić pasek na różne kolory w każdym Views..... Teraz chcę zmienić kolor tła bez używania obrazu na jednolity kolor z app delegate. Nie chcę tego ustawiać za każdym razem z każdego widoku i nie chcę pisać CGRect.

Próbowałem, [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];ale nie działa i nie mogę znaleźć kodu, który działałby w delegacie aplikacji.

Czy ktoś mógłby wskazać mi właściwy kierunek?

Odpowiedzi:


203

Możesz użyć [[UINavigationBar appearance] setTintColor:myColor];

Od iOS 7 musisz ustawić, [[UINavigationBar appearance] setBarTintColor:myColor];a także [[UINavigationBar appearance] setTranslucent:NO].

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];

Dzięki, czy wiesz, jak usunąć biały domyślny gradient, który pochodzi z góry, aby uzyskać jednolity kolor?
Jonathan Thurft

1
Z tintColorgradientem pozostanie. Jeśli nie chcesz mieć tego gradientu, musisz utworzyć podklasę swojego UINavigationBar LUB utworzyć UIImage dla wyglądu.
Seb Thiebaud

59
na iOS 7, który nie działał, musiałem użyćnavigationBar.barTintColor = myColor;
Juan de la Torre

4
translucentwłaściwości po prostu nie można ustawić za pomocą UIAppearance w iOS 6 i iOS 7. W związku [[UINavigationBar appearance] setTranslucent:NO]z tym aplikacja ulegnie awarii z NSInvalidArgumentExceptionbłędem. Użyj [self.navigationController.navigationBar setTranslucent:NO]lub usuń zaznaczenie przezroczystości za pomocą IB.
Sam,

1
Wersja UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
szybka

103

Aby zmienić kolor tła, a nie odcień, zadziała następujący fragment kodu:

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];

3
To powinna być akceptowana odpowiedź, działa idealnie na iOS7.
joshuahornby 10

Prawidłowa odpowiedź dla iOS 7. Pracuje dla mnie.
LondonGuy,

Aby to zadziałało, wymagana jest przezroczystość. Ponieważ zaakceptowana odpowiedź tego nie zawiera, powinna to być odpowiedź zaakceptowana.
Tristan Warner-Smith

3
Dla wyjaśnienia, zaakceptowaną odpowiedzią jest AppDelegate, a to dotyczy kontrolera widoku.
Dziekan

@Dean ma rację. Zaakceptowana odpowiedź będzie obowiązywać dla nowo utworzonych UIViewControllers, podczas gdy ta będzie pokazywać efekty przy każdym wywołaniu.
aramusss

19

Aby to zrobić w iOS 7:

[[UINavigationBar appearance] setBarTintColor:myColor];

15

Szybka składnia:

    UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color

Po prostu umieściłem to w AppDelegate didFinishLaunchingWithOptions i utrzymuje się to w całej aplikacji


8

Szybki :

self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false

6

Możesz to łatwo zrobić za pomocą Xcode 6.3.1. Wybierz pasek nawigacji w konspekcie dokumentu. Wybierz Inspektor atrybutów. Odznacz opcję Translucent. Ustaw Bar Odcień na żądany kolor. Gotowe!


Dzięki, znalazłem wiele odniesień do tego, jak to zrobić w ObjC i swift, ale nikt nie wspomniał o tym, że jest dostępny w IB
Nick

3

Jak wspominają inne odpowiedzi, możesz użyć setTintColor:, ale chcesz mieć jednolity kolor, a nie jest to możliwe do ustawienia koloru odcienia AFAIK.

Rozwiązaniem jest programowe utworzenie obrazu i ustawienie tego obrazu jako obrazu tła dla wszystkich pasków nawigacji za pośrednictwem UIAppearance. Jeśli chodzi o rozmiar obrazu, nie jestem pewien, czy obraz 1x1 piksel będzie działał, czy potrzebujesz dokładnego rozmiaru paska nawigacyjnego.Sprawdź drugą odpowiedź na to pytanie, aby zobaczyć, jak stworzyć obraz.

Radzę, że nie lubię "przeciążać" delegata aplikacji takimi rzeczami. Zwykle tworzę klasę o nazwie AppearanceConfigurationtylko z jedną publiczną metodą, w configureAppearancektórej ustawiam wszystkie potrzebne mi rzeczy UIAppearance, a następnie wywołuję tę metodę z delegata aplikacji.


2

Możesz ustawić kolor tła UINavigation za pomocą tego kodu w dowolnym kontrolerze widoku

self.navigationController.navigationBar.backgroundColor = [UIColor colorWithRed:10.0f/255.0f green:30.0f/255.0f blue:200.0f/255.0f alpha:1.0f];

2

W Swift 4.2 i Xcode 10.1

Możesz zmienić kolor paska nawigacyjnego z AppDelegate bezpośrednio na cały projekt.

W didFinishLaunchingWithOptions launchOptions:zapisie poniżej do linii kodu

UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)

Tutaj

tintColor służy do ustawiania obrazów tła, takich jak przyciski Wstecz, obrazy linii menu itp. (Zobacz poniżej lewy i prawy obraz menu)

barTintColor służy do koloru tła paska nawigacji

Jeśli chcesz ustawić określony kolor paska nawigacji kontrolera widoku, napisz poniższy kod w viewDidLoad()

//Add navigation bar colour
navigationController?.navigationBar.barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)
navigationController?.navigationBar.tintColor = UIColor.white

wprowadź opis obrazu tutaj


-1

Tutaj problemem jest kod koloru. Zamiast używać 195/255, użyj 0.7647 lub 195.f / 255.f Problem polega na tym, że konwersja wartości zmiennoprzecinkowej nie działa poprawnie. Spróbuj użyć dokładnej wartości zmiennoprzecinkowej.

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.