2012-04-24 11 views
8

Czy mogę ustawić kolor tła paska nawigacyjnego na UINavigationController na jednolity kolor?Ustaw tło nawigacyjne na jednolity kolor

Wiem, że mogę zmienić kolor Odcień, ale to nadal pozostawia mnie z efektem gradientu/szkła.

W jaki sposób mogę się tego pozbyć i po prostu mieć zwykły, stary, jednolity kolor?

Odpowiedz

5

Chyba trzeba podklasy UINavigationBar i zastąpić -(void)drawRect:(CGRect)rect:

UIColor *colorFlat = /* any UIColor*/ 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetFillColorWithColor(context, [colorFlat CGColor]); 
CGContextFillRect(context, rect); 
+0

Dzięki. Działa jak marzenie. Aby ustawić kolory przycisków, zmieniłem kolor tinty paska nawigacji i otrzymam kolor tinty. Tak jak się spodziewałem. – MartinHN

+0

Czy wiesz, czy można to zrobić za pośrednictwem proxy wygląd? '[[UINavigationBar appearance] .....];' – MartinHN

+0

Nie wiem, używam tego kodu w projekcie z iOS 4.2, gdy wygląd był niedostępny –

-4

Tworzenie CustomUIViewController który rozciąga UIViewController i zastąpić viewDidLoad do czegoś takiego:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.view.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0]; 
} 

potem użyć CustomUIViewController w swoich kontrolerów.

Credits

+0

Czy nie można obejść się bez obrazu? – MartinHN

+0

Shure, przepraszam za pomyłkę, spróbuj użyć: [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] – kcho0

+0

Bez powodzenia. Czy nie powinienem ustawić tła na pasku nawigacyjnym? na przykład 'self.navigationController.navigationBar.backgroundColor'? Które też nie działa :) – MartinHN

46

Poniższy kod powoduje także kolorem paska nawigacyjnego:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundColor:[UIColor redColor]]; 
+2

Należy również ustawić kolor tinty lub przyciski na pasku nawigacji nie będą miały koloru: [[UINavigationBar appearance] setTintColor: [UIColor redColor]]; –

+0

Gdzie to robisz? Próbuję zrobić to w viewDidLoad kontrolera widoku z paskiem nawigacji i nie wydaje się, aby to zadziałało. Czy trzeba to zrobić wcześniej? Mam storyboard, który wydaje się nadrzędny. – David

+0

David, trzeba to zrobić, zanim przedstawisz widok. Konfiguracja "wyglądu" nie aktualizuje widocznych widoków. Jeśli chcesz ustawić to globalnie najlepsze miejsce do zrobienia, będzie to aplikacja: didFinishLaunchingWithOptions :. – Lubiluk

0

kiedyś zastąpić metoda drawRect i kolor wypełnienia; ale po aktualizacji do iOS7 powoduje pewne problemy na UINavigationBar. Jeśli napiszesz własną, poprawną metodę, nawet jeśli wywołasz [super drawRect], zmieni ona wymiar pręta i otrzymasz pasek nawigacji o wysokości 44 pikseli. Pasek stanu pozostaje pusty.

Aby uzyskać solidne kolorową navigationBar użyłem obraz jako obraz tła (dowolny mały stałe kolorowy obraz będzie zrobić, ponieważ jesteś rozciąganie) i dodano ten linie wewnątrz metody initWithFrame podklasy UINavigationBar:

[self setBackgroundColor:[UIColor clearColor]]  
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"bgimage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault]; 
0

Następujący kod pracował dla mnie:

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 
[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]]; 
self.navigationController.navigationBar.translucent = NO; 
[self.navigationController.navigationBar setShadowImage:[UIImage new]];