Cum se schimbă culoarea barei de navigare în iOS 7? (Programare, Ios, Ios7, Storyboard, Uikit, Uinavigationbar)

Patricio Guerra a intrebat.

Cum pot schimba culoarea barei de navigare în iOS 7?

Practic, vreau să obțin ceva asemănător cu bara de navigare Twitter (actualizat Twitter pentru iOS7 care este). Am încorporat-într-o bară de navigare deasupra unui view controller. Tot ce vreau este să schimb culoarea barei de navigație în albastru deschis împreună cu bara de utilitate din partea de sus. Se pare că nu pot găsi o opțiune în storyboard.

Comentarii

  • stackoverflow.com/questions/18177010 –  > Por carmen_munich.
  • [[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]]]; this wll work from ios 7 onwards –  > Por Chandramani.
  • urmați acest tutorial appcoda.com/customize-navigation-status-bar-ios-7 –  > Por Chandramani.
18 răspunsuri
Rajneesh071

Comportamentul de tintColor pentru bare s-a schimbat în iOS 7.0. Nu mai afectează fundalul barei.

Din documentație:

barTintColor Referință la clasă

Culoarea de nuanță care se aplică fundalului barei de navigare.

@property(nonatomic, retain) UIColor *barTintColor

Discuție
Această culoare este făcută translucidă în mod implicit, cu excepția cazului în care setați proprietatea translucidă la NO.

Disponibilitate

Disponibil în iOS 7.0 și versiunile ulterioare.

Declarată în
UINavigationBar.h

Cod

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];
}

De asemenea, putem folosi acest lucru pentru a verifica versiunea iOS, după cum se menționează în Ghidul de tranziție UI 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;
    }

EDITAREFolosind xib

Comentarii

  • dar unde pot plasa acest cod?? Sunt foarte nou la acest lucru hahah. L-am plasat în cadrul delegatului aplicației și nu pare să facă mare lucru. Se construiește foarte bine totuși. –  > Por Patricio Guerra.
  • în interiorul viewController –  > Por Rajneesh071.
  • Aș pune-o în viewDidLoad în viewController. –  > Por HalR.
  • if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) Ar fi mai bine să testați pe ce versiune de iOS rulați, așa cum a declarat Apple în ghidul de tranziție: developer.apple.com/library/ios/documentation/userexperience/… –  > Por David Thompson.
  • De asemenea, puteți utiliza if ([self.navigationController.navigationBar respondsToSelector:@selector(setBarTintColor:)]) vs. numărul versiunii pentru a verifica dacă puteți seta barTintColor –  > Por SimpsOff.
alondono

A face ceea ce a cerut întrebarea inițială – pentru a obține vechiul aspect al barei de navigare a lui Twitter, fundal albastru cu text alb – este foarte ușor de făcut doar folosind Interface Builder în Xcode.

  • Folosind Document Outline, selectați bara de navigare.
  • În Attributes Inspector, în grupul Navigation Bar, modificați Style (Stilul) din Default (Implicit) în Black (Negru). Acest lucru schimbă culoarea de fundal a barelor de navigare și de stare în negru, iar textul acestora în alb. Astfel, bateria și alte pictograme și textul din bara de stare vor avea culoarea albă atunci când aplicația este în funcțiune.
  • În același grup de bare de navigare, modificați Bar Tint (nuanța barei) la culoarea pe care o doriți.
  • Dacă aveți elemente Bar Button (butoane de bară) în bara de navigare, acestea vor afișa în continuare textul lor în culoarea albastră implicită, așa că, în Attributes Inspector (Inspectorul de atribute), grupul View (Vizualizare), modificați Tint (Nuanța) în White Colour (Culoare albă).

Ar trebui să obțineți astfel ceea ce doriți. Iată o captură de ecran care vă va permite să vedeți mai ușor unde trebuie făcute modificările.

Rețineți că schimbarea doar a nuanței barei nu modifică culoarea textului din bara de navigare sau din bara de stare. Stilul trebuie, de asemenea, să fie schimbat.

Comentarii

  • Selectarea negrului pentru iOS 9 este depreciată, există vreo șansă de a avea un răspuns actualizat –  > Por Rob85.
  • @Rob85 Nu sunt în fața Xcode în acest moment, dar când a fost lansat Xcode 7 (cu iOS 9) am verificat că aceste instrucțiuni sunt încă actualizate. Asigurați-vă că bara de navigare este selectată, stilul negru ar trebui să fie în inspectorul de atribute al barei de navigare. –  > Por alondono.
  • @Rob85 Am verificat pe site-ul Apple pentru dezvoltatori, iar stilurile Default și Black sunt încă disponibile în iOS 9. Cele depreciate sunt BlackOpaque și BlackTranslucent, care au fost înlocuite cu o combinație de Black stilului și a căsuței de selectare Translucent. UIBarStyle pe site-ul web Apple pentru dezvoltatori –  > Por alondono.
  • Îmi pare rău @alondono aveți perfectă dreptate, am făcut clic pe bara de navigare pe Controlerul de navigare nu în conturul documentului de aceea nu am putut să o văd. Negrul pe care îl văd depreciat era pe bara de stare simulată metrics->status bar. Vă mulțumim pentru răspunsurile dvs.  > Por Rob85.
  • @Rob85 Cool! Vă mulțumim că m-ați anunțat. –  > Por alondono.
pNre
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;

// *barTintColor* sets the background color
// *tintColor* sets the buttons color

Comentarii

  • Și unde anume pot să pun acest cod? Îmi pare rău pentru întrebarea de începător acolo hahah – –  > Por Patricio Guerra.
  • codul poate fi plasat în metoda – (void)viewDidLoad a controlerului de navigare – (void)viewDidLoad a controlerului de navigare –  > Por pNre.
  • În iOS 9, dacă setați barTintColor la negru, ora, numele dispozitivului și bateria vor fi și ele negre, astfel încât să nu le puteți vedea. Pentru a evita acest lucru, în loc să folosiți barTintColor, utilizați self.navigationController.navigationBar.barStyle = UIBarStyleBlack; – –  > Por TheJeff.
RFG

Într-o aplicație bazată pe navigație, puteți pune codul în AppDelegate. Un cod mai detaliat ar putea fi:

// 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];

Comentarii

  • add [[UINavigationBar appearance] setBarTintColor:[UIColor barColor]]; pentru iOS 7 –  > Por Samin.
zeezoo

În viewDidLoad, set:

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

Schimbă ( blueColor ) la orice culoare doriți.

William Hu

Pentru swift schimbați culoarea barei de navigare:

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

schimbați fontul, dimensiunea și culoarea titlului:

self.title = "title"
self.navigationController?.navigationBar.titleTextAttributes = [
        NSAttributedString.Key.foregroundColor : UIColor.white,
        NSAttributedString.Key.font : UIFont(name: "Futura", size: 30)!
    ]

RFG

În iOS 7 trebuie să folosiți proprietatea -barTintColor:

navController.navigationBar.barTintColor = [UIColor barColor];

Kyle Greenlaw

Dacă doriți să utilizați un cod hexagonal, iată care este cea mai bună modalitate de a face acest lucru.

În primul rând, definiți acest lucru în partea de sus a clasei dvs:

#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]

Apoi, în interiorul „application didFinishLaunchingWithOptions”, puneți acest lucru:

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

Puneți codul hexagonal în locul lui 00b0f0.

Comentarii

  • [UINavigationBar appearance] a fost de mare ajutor. –  > Por Ken.
bbaassssiiee

Dacă trebuie să sprijiniți ios6 și ios7, atunci obțineți acel albastru deschis special folosind acest lucru în dvs. 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];
    }
}

Comentarii

  • Pe iOS 7: -self.navigationController.navigationBar.barTintColor este culoarea barei ȘI -self.navigationController.navigationBar.tintColor este culoarea textului butoanelor (înapoi, gata…). –  > Por IgniteCoders.
pqsk

De fapt, este mai ușor decât răspunsurile pe care le-am văzut aici:

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).

Sper că ajută pe cineva. Nu mi-au plăcut răspunsurile pe care le-am văzut. Îmi place să-mi păstrez codul cât mai curat posibil. Nu spun că este greșit să o faci programatic, dar există oameni ca mine….acest lucru este pentru voi.

Comentarii

  • Mulțumesc, schimbasem acest lucru cu luni în urmă în timp ce mă jucam și nu am reușit să îmi dau seama cum să îl schimb înapoi! –  > Por Symmetric.
  • Nicio problemă, mă bucur că am putut ajuta pe cineva –  > Por pqsk.
  • Cred că acesta este cel mai direct răspuns! Mulțumesc.  > Por Ispas Claudiu.
  • Nicio problemă. Mă bucur că îți este în continuare de ajutor –  > Por pqsk.
Dashony
//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;
}

CodeBrew

Pentru ca codul lui Rajneesh071 să fie complet, este posibil să doriți, de asemenea, să setați culoarea titlului barei de navigare (și fontul, dacă doriți), deoarece comportamentul implicit s-a schimbat de la iOS 6 la 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];
}

Darshan Kunjadiya

Adăugați doar acest cod în ViewContorller sau în codul dvs. AppDelegate

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]];
}

MaxEcho

Într-o aplicație bazată pe navigare puteți schimba culoarea

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];
}

Comentarii

  • Modificarea proprietății tintColor în iOS7 nu mai are ca efect schimbarea culorii de fundal a barelor. Tint color în iOS7 afectează doar culoarea textului din BarButtonItems etc. –  > Por Pascal Bayer.
Mubin Shaikh
#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]];
    }

John

Această întrebare și aceste răspunsuri sunt utile. Cu ajutorul lor am reușit să îmi setez albastrul închis dorit navigationBar cu titlul și textul butonului alb.

Dar aveam nevoie, de asemenea, să schimb ceasul, purtătorul, puterea semnalului, etc. în alb. Negrul pur și simplu nu contrasta suficient cu albastrul închis.

Este posibil să fi trecut cu vederea această soluție într-unul dintre răspunsurile anterioare, dar am reușit să fac această modificare adăugând această linie la nivelul meu de sus viewController‘s viewDidLoad:

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];

Comentarii

  • UIStatusBarStyleLightContent funcționează, dar se pare că enumerația corectă pentru setBarStyle: este UIBarStyleBlack –  > Por Collin Allen.
Gaurav Gilani
- (void)viewDidLoad
{
    [super viewDidLoad];

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

user4952581

Pentru culoare :

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

Pentru imagine

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