UINavigationBar sin UINavigationController

Quiero tener un UINavigationBar en la parte superior de mi aplicación, al igual que en la aplicación de teléfono, por ejemplo, pero no quiero utilizarlo con un UINavigationController , es decir, quiero utilizarlo como un object "independiente".

El controller de vista que tendrá UINavigationBar tiene su vista en un file .xib . Intenté arrastrar una instancia de UINavigationBar desde la biblioteca de objects y funciona bien, pero la barra de estado de la aplicación sigue siendo blanca mientras que la UINavigationBar es gris. Quiero que la barra de estado tenga el mismo tono gris, pero no el rest de la vista.

Para mostrarte lo que quiero decir, tengo dos fotos. La primera es la aplicación del teléfono. Observe que la barra de estado y la barra de navigation son de color gris, pero el background es blanco.

aplicación de teléfono iPhone

La siguiente image es de mi aplicación, ya que puedes ver que la barra de estado es blanca (quiero que sea gris también).

Mi aplicación de iPhone

También he intentado usar el siguiente código en el controller de vista.

 - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.title = @"Köp ProViva"; } 

Lo intenté con y sin la UINavigationBar pero no aparece ninguna barra de navigation o se ve igual que antes.

¿Cómo puedo agregar un UINavigationBar y hacer que la barra de estado tenga el mismo color?

Puede implementar el método delegate -positionForBar: del protocolo UINavigationBarDelegate y simplemente devolver UIBarPositionTopAttached .

Ejemplo:

 -(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar { return UIBarPositionTopAttached; } 

 //if you're not using a `UINavigationController` and instead //simply want a `UINavigationBar` then use the following method as well -(void)testMethod { UINavigationBar *navBar = [[UINavigationBar alloc] init]; [navBar setFrame:CGRectMake(0, 20, self.view.frame.size.width, 44)]; [navBar setBarTintColor:[UIColor lightGrayColor]]; [navBar setDelegate:self]; [self.view addSubview:navBar]; } 

Espero que esto ayude.

// Creación de la barra de navigation simple

 UINavigationBar *headerView = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; headerView.topItem.title = @"title"; [self.view addSubview:headerView]; 

No puede modificar directamente el color de background de la barra de estado, pero dado que es transparente ( desde iOS7 ), puede colocar una UIView de 20 UIView de alto detrás de la barra de estado con el color deseado y aparecerá como si la barra de estado tuviera un background color.

En cuanto a UINavigationBar , simplemente está modificando un object UINavigationBar que lo ayudará.

Ejemplo:

 - (void)viewDidLoad { [super viewDidLoad]; //... //ISSUE 1: StatusBar Background UIView *vwStatusBarUnderlay = [[UIView alloc] init]; [vwStatusBarUnderlay setFrame:CGRectMake(0, 0, self.view.frame.size.width, 20)]; [vwStatusBarUnderlay setBackgroundColor:[UIColor lightGrayColor]]; [self.view addSubview:vwStatusBarUnderlay]; //[vwStatusBarUnderlay sendSubviewToBack:self.view]; //ISSUE 2: NavigationBar UINavigationBar *navBar = [[UINavigationBar alloc] init]; [navBar setFrame:CGRectMake(0, 20, self.view.frame.size.width, 44)]; [navBar setBarTintColor:[UIColor lightGrayColor]]; [navBar setTranslucent:NO]; UINavigationItem *navItem = [[UINavigationItem alloc] init]; [navItem setTitle:@"Favoriter"]; [navItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:nil action:nil]]; [navBar setItems:@[navItem]]; [self.view addSubview:navBar]; } 

La primera respuesta funcionó bien para mí, pero aquí está en Swift en lugar de Objective-C:

1- establece el delegado de la barra de navigation en el control de visualización, ya sea a través de storyboard o el código.
2- agregue UINavigationBarDelegate a los protocolos de su controller o extiéndalo de la siguiente manera:

 extension ViewController: UINavigationBarDelegate { func positionForBar(bar: UIBarPositioning) -> UIBarPosition { return UIBarPosition.TopAttached } } 

¡Eso es todo, funciona perfectamente!

No podemos establecer el color de la barra de estado según nuestra elección, lo que podemos hacer es;

En el file AppDelegate.m;

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //Set status bar style here [[UIApplication shanetworkingApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; }