Jak zmienić kolor paska nawigacji w iOS 7?

213

Jak zmienić kolor paska nawigacji w iOS 7?

Zasadniczo chcę osiągnąć coś takiego, jak pasek nawigacji Twittera (na to zaktualizowano Twittera iOS7). Wbudowałem pasek nawigacyjny na szczycie view controller. Chcę tylko zmienić kolor paska nawigacyjnego na jasnoniebieski wraz z paskiem narzędzi u góry. Nie mogę znaleźć opcji w swoim storyboard.

Patricio Guerra
źródło
[[Wygląd UINavigationBar] setBarTintColor: [UIColor blackColor]]; to zadziała od iOS 7
Chandramani
1
postępuj zgodnie z tym samouczkiem appcoda.com/customize-navigation-status-bar-ios-7
Chandramani

Odpowiedzi:

319

Zachowanie się tintColorpasków zmieniło się w iOS 7.0. Nie wpływa już na tło paska.

Z dokumentacji:

Odwołanie do klasy barTintColor

Kolor odcienia do zastosowania na tle paska nawigacji.

@property(nonatomic, retain) UIColor *barTintColor

Dyskusja
Domyślnie ten kolor jest półprzezroczysty, chyba że ustawisz właściwość półprzezroczystą na NO.

Dostępność

Dostępne w iOS 7.0 i nowszych.

Zadeklarowano w
UINavigationBar.h

Kod

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    // iOS 7.0 or later   
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    self.navigationController.navigationBar.translucent = NO;
}else {
    // iOS 6.1 or earlier
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
}

Możemy również użyć tego do sprawdzenia wersji iOS, jak wspomniano w Przewodniku przejścia interfejsu użytkownika w systemie iOS 7

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
        // iOS 6.1 or earlier
        self.navigationController.navigationBar.tintColor = [UIColor redColor];
    } else {
        // iOS 7.0 or later     
        self.navigationController.navigationBar.barTintColor = [UIColor redColor];
        self.navigationController.navigationBar.translucent = NO;
    }

EDYCJA Za pomocą xib

wprowadź opis zdjęcia tutaj

Rajneesh071
źródło
3
ale gdzie mogę umieścić ten kod? Jestem bardzo nowy w tym hahah. Umieściłem go w delegacie aplikacji i wydaje się, że naprawdę niewiele robi. Jednak dobrze się buduje.
Patricio Guerra
1
widok wewnątrzController
Rajneesh071
1
Umieściłbym to w viewDidLoad w twoim viewController.
HalR
2
if (floor (NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) Lepiej byłoby przetestować wersję iOS, na której pracujesz, zgodnie z informacjami podanymi przez Apple w przewodniku przejścia: developer.apple.com/library/ios/documentation/userexperience/…
David Thompson,
1
Możesz również użyć if ([self.navigationController.navigationBar odpowiadaToSelector: @selector (setBarTintColor :)]) w porównaniu z numerem wersji, aby sprawdzić, czy możesz ustawić barTintColor
SimpsOff
129

Wykonanie tego, co pierwotne pytanie - aby uzyskać wygląd starego paska nawigacji Twittera, niebieskie tło z białym tekstem - jest bardzo łatwe do wykonania po prostu za pomocą Konstruktora interfejsów w Xcode.

  • Korzystając z konspektu dokumentu, wybierz pasek nawigacji.
  • W Inspektorze atrybutów w grupie Pasek nawigacji zmień styl z Domyślny na Czarny. Zmienia to kolor tła pasków nawigacji i stanu na czarny, a ich tekst na biały. Tak więc bateria oraz inne ikony i tekst na pasku stanu będą wyglądać na biało podczas działania aplikacji.
  • W tej samej grupie Pasek nawigacji zmień Odcień paska na kolor, który Ci się podoba.
  • Jeśli masz elementy paska przycisku na pasku nawigacji, będą one nadal wyświetlać tekst w domyślnym niebieskim kolorze, więc w Inspektorze atrybutów, grupa Widok zmień Odcień na Biały.

To powinno zapewnić ci to, czego chcesz. Oto zrzut ekranu, który ułatwiłby sprawdzenie, gdzie wprowadzić zmiany.

Gdzie wprowadzić niezbędne zmiany, w tym wynik w symulatorze iOS

Pamiętaj, że zmiana tylko odcienia paska nie zmienia koloru tekstu na pasku nawigacji lub pasku stanu. Styl również musi zostać zmieniony.

alondono
źródło
Wybór czarnego dla iOS 9 jest przestarzały, wszelkie szanse na zaktualizowaną odpowiedź
Rob85
@ Rob85 Nie jestem teraz przed Xcode, ale kiedy Xcode 7 (z iOS 9) został wydany, zweryfikowałem, że te instrukcje są nadal aktualne. Upewnij się, że pasek nawigacji jest zaznaczony, czarny styl powinien znajdować się w inspektorze atrybutów paska nawigacji.
alondono
2
@ Rob85 Sprawdziłem witrynę programistów Apple i style Defaulti Blacknadal są dostępne w iOS 9. Te przestarzałe są BlackOpaquei BlackTranslucentzostały zastąpione kombinacją Blackstylu i półprzezroczystego pola wyboru. UIBarStyle w witrynie Apple dla programistów
alondono
Przepraszam @alondono, masz całkowitą rację, kliknąłem pasek nawigacji na kontrolerze nawigacyjnym, który nie ma w zarysie dokumentu, dlatego nie mogłem go zobaczyć. Czarny, który widzę jako przestarzały, znajdował się na symulowanym wskaźniku -> pasek stanu. Dzięki za odpowiedzi
Rob85,
@ Rob85 Cool! Dzięki, że dałeś mi znać.
alondono
76
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;

// *barTintColor* sets the background color
// *tintColor* sets the buttons color
pNre
źródło
4
I gdzie dokładnie mogę umieścić ten kod? Przepraszam za pytanie dla początkujących, hahah
Patricio Guerra
1
kod można umieścić w metodzie - (void)
viewDidLoad
2
W systemie iOS 9 ustawienie barTintColor na czarny spowoduje, że czas, nazwa urządzenia i bateria też będą czarne, więc nie będziesz ich widzieć. Aby tego uniknąć, zamiast barTintColor, użyj self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
TheJeff
46

W aplikacji opartej na nawigacji możesz umieścić kod w AppDelegate. Bardziej szczegółowy kod może być:

// Navigation bar appearance (background and title)

[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor titleColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"FontNAme" size:titleSize], NSFontAttributeName, nil]];

[[UINavigationBar appearance] setTintColor:[UIColor barColor]];

// Navigation bar buttons appearance

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor textBarColor], NSForegroundColorAttributeName, shadowColor, NSShadowAttributeName, [UIFont fontWithName:@"FontName" size:titleSize], NSFontAttributeName, nil];
RFG
źródło
6
dodaj [[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];na iOS 7
Samin
24

W viewDidLoad, ustaw:

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];

Zmień ( blueColor) na dowolny kolor, jaki chcesz.

zeezoo
źródło
18

Aby szybko zmienić kolor paska nawigacji:

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

zmień tytuł czcionki, rozmiar, kolor:

self.title = "title"
self.navigationController?.navigationBar.titleTextAttributes = [
        NSAttributedString.Key.foregroundColor : UIColor.white,
        NSAttributedString.Key.font : UIFont(name: "Futura", size: 30)!
    ]
William Hu
źródło
14

W iOS 7 musisz użyć właściwości -barTintColor:

navController.navigationBar.barTintColor = [UIColor barColor];
RFG
źródło
13

Jeśli chcesz użyć kodu szesnastkowego, oto najlepszy sposób, aby to zrobić.

Najpierw zdefiniuj to na górze swojej klasy:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

Następnie w „aplikacji didFinishLaunchingWithOptions” umieść to:

[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00b0f0)];

Umieść kod szesnastkowy zamiast 00b0f0.

Kyle Greenlaw
źródło
1
[Wygląd UINavigationBar] był bardzo pomocny.
Ken
11

Jeśli potrzebujesz obsługi ios6 i ios7, otrzymujesz ten konkretny jasnoniebieski, używając tego w UIViewController :

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
    if ([[ver objectAtIndex:0] intValue] >= 7) {
        self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
        self.navigationController.navigationBar.translucent = NO;
    }else{
        self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
    }
}
bbaassssiiee
źródło
3
W systemie iOS 7: -self.navigationController.navigationBar.barTintColor to kolor paska ORAZ -self.navigationController.navigationBar.tintColor to kolor tekstu przycisków (wstecz, gotowe ...).
IgniteCoders
10

To w rzeczywistości łatwiejsze niż odpowiedzi, które tu widziałem:

1) Just make sure you select the navigation bar on the Navigation control. 
2) Select the color you want in the bar tint.
3) You have other options too, and/or individually on each view (just play with it).

Mam nadzieję, że to komuś pomoże. Nie podobały mi się odpowiedzi, które widziałem. Lubię dbać o to, aby mój kod był jak najbardziej czysty. Nie mówię, że programowanie jest niewłaściwe, ale są ludzie tacy jak ja ... to jest dla was. Zmiana koloru paska nawigacji

pqsk
źródło
Dzięki, zmieniłem się kilka miesięcy temu podczas zabawy i nie mogłem wymyślić, jak to zmienić!
Symetryczny
Nie ma problemu, cieszę się, że mogłem komuś pomóc
pqsk
Myślę, że to najprostsza odpowiedź! Dzięki
Ispas Claudiu
Nie ma problemu. Cieszę się, że nadal jest pomocny
pqsk
5

Aby uzupełnić kod Rajneesh071, możesz również ustawić kolor tytułu paska nawigacji (i czcionkę, jeśli chcesz), ponieważ domyślne zachowanie zmieniło się z iOS 6 na 7:

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7)
{
    self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
    self.navigationController.navigationBar.translucent = NO;
    NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithDictionary:mainNavController.navigationBar.titleTextAttributes];
    [textAttributes setValue:[UIColor whiteColor] forKey:UITextAttributeTextColor];
    self.navigationController.navigationBar.titleTextAttributes = textAttributes;
}
else
{
    self.navigationController.navigationBar.tintColor = [UIColor blackColor];
}
CodeBrew
źródło
5

Dodaj tylko ten kod w swoim ViewContorller lub w swoimAppDelegate

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
    //This is For iOS6
    [self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}
else
{
    //This is For iOS7
    [self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}
Darshan Kunjadiya
źródło
4
//You could place this code into viewDidLoad
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
 }   
//Or you can place it into viewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:(BOOL)animated];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
}
Dashony
źródło
4

W aplikacji nawigacyjnej możesz zmienić kolor

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
    self.navigationController.navigationBar.translucent = NO;
} else {
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
}
MaxEcho
źródło
1
Zmiana właściwości tintColor w iOS7 nie powoduje już zmiany koloru tła pasków. Kolor odcienia w iOS7 wpływa tylko na kolor tekstu elementów BarButton itp.
Pascal Bayer
4
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)


  if (_kisiOS7)
    {
        [[UINavigationBar appearance] setBarTintColor:[UIcolor redcolor]];
    }
    else
    {
        [[UINavigationBar appearance] setBackgroundColor:[UIcolor blackcolor]];
        [[UINavigationBar appearance] setTintColor:[UIcolor graycolor]];
    }
Mubin Shaikh
źródło
3

To pytanie i odpowiedzi są pomocne. Dzięki nim mogłem ustawić pożądany ciemnoniebieski navigationBarkolor z białym tytułem i tekstem przycisku.

Ale musiałem też zmienić zegar, nośną, siłę sygnału itp. Na biały. Czarny po prostu nie kontrastował wystarczająco z ciemnoniebieskim.

Ja mogę pominąć faktu, że rozwiązanie w jednym z poprzednich odpowiedzi, ale udało mi się dokonać takiej zmiany przez dodanie tej linii do mojego najwyższego poziomu viewController„s viewDidLoad:

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];
Jan
źródło
UIStatusBarStyleLightContentdziała, ale wydaje się, że właściwym wyliczeniem setBarStyle:jestUIBarStyleBlack
Collin Allen
3
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}
Gaurav Gilani
źródło
3

Dla koloru:

[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];

Do obrazu

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];

źródło