Wiem, jak zmienić UINavigationBar
obraz 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?
ios
objective-c
cocoa-touch
uinavigationbar
Jonathan Thurft
źródło
źródło
tintColor
gradientem pozostanie. Jeśli nie chcesz mieć tego gradientu, musisz utworzyć podklasę swojego UINavigationBar LUB utworzyć UIImage dla wyglądu.navigationBar.barTintColor = myColor;
translucent
wł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 zNSInvalidArgumentException
błędem. Użyj[self.navigationController.navigationBar setTranslucent:NO]
lub usuń zaznaczenie przezroczystości za pomocą IB.UINavigationBar.appearance().barTintColor = myColor
UINavigationBar.appearance().isTranslucent = false
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];
źródło
UIViewControllers
, podczas gdy ta będzie pokazywać efekty przy każdym wywołaniu.Aby to zrobić w iOS 7:
[[UINavigationBar appearance] setBarTintColor:myColor];
źródło
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
źródło
Szybki :
self.navigationController?.navigationBar.barTintColor = UIColor.red self.navigationController?.navigationBar.isTranslucent = false
źródło
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!
źródło
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
AppearanceConfiguration
tylko z jedną publiczną metodą, wconfigureAppearance
której ustawiam wszystkie potrzebne mi rzeczy UIAppearance, a następnie wywołuję tę metodę z delegata aplikacji.źródło
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];
źródło
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 koduUINavigationBar.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
źródło
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.
źródło