Barra de estado color en un TabBarController con NavigationBar no funciona

He leído muchas publicaciones aquí y he probado la mayoría de las opciones mencionadas, pero ninguna ha solucionado el problema. Tengo una aplicación basada en un controller de barra de tabs. Cada pestaña es UIViewController con una barra de navigation en la parte superior.

Agregar este código a la AppDelegate me da una barra de navigation de color naranja con text en blanco, pero una barra de estado blanca con text en negro.

[[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]]; [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}]; 

Al leer las respuestas en varias páginas, sugiera agregar lo siguiente al controller View:

 - (UIStatusBarStyle)prefernetworkingStatusBarStyle { return UIStatusBarStyleLightContent; } 

Luego, invocando esto en Ver hizo cargar:

 [self setNeedsStatusBarAppearanceUpdate]; 

Esto me da una barra de estado blanca con text blanco, ¿cómo puedo hacer que la barra de estado se vuelva naranja para coincidir con mi barra de navigation?

La solución mencionada aquí https://stackoverflow.com/a/19513714/505457 para aquellos que usan un controller de navigation no funciona, supongo que eso es porque mi controller principal es un controller de barra de tabs.

¿Alguien se topa con esto antes? Gracias de antemano por cualquier consejo / sugerencia que pueda tener. Puedo proporcionar una aplicación de ejemplo si es necesario, pero probablemente sea tan rápida para crear una con la plantilla Barra de tabs, agregar una barra de navigation y luego pegar en mis ejemplos de código.

Plasma

Bueno, yo tenía casi el mismo problema desde iOS7, pero mi solución rápida es cambiar todas sus vistas desde la primera, me refiero a configurar su configuration de barra de color en el file AppDelegate.m , recomiendo utilizar este marco libre Nab Bar Color y gradiente es muy fácil de usar y también estará disponible para establecer un hermoso gradiente en todas sus vistas.

Vea los ejemplos en el proyecto.

Puede encontrar el statusBar UIVIew por su nombre y UIVIew . Agregue este método a su AppDelegate.m y didFinishLaunchingWithOptions desde didFinishLaunchingWithOptions :

 - (void)setStatusBarBackgroundColor:(UIColor *)color { UIView *statusBar = [[[UIApplication shanetworkingApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { statusBar.backgroundColor = color; } } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... [self setStatusBarBackgroundColor:[UIColor orangeColor]]; ... } 

Nota: hay aplicaciones en la tienda que usan este método. Entonces, está bien con la política de HIG de Apple.

Normalmente, no debería agregar una UINavigationBar a un UIViewController . En cambio, llene su UINavigationController s UINavigationController s.

  let firstViewController = FirstViewController(nibName: nil, bundle: nil) let firstNavigationController = UINavigationController(rootViewController: firstViewController) let secondViewController = SecondViewController(nibName: nil, bundle: nil) let secondNavigationController = UINavigationController(rootViewController: secondViewController) let navigationControllers = [ firstNavigationController, secondNavigationController ] yourTabBarController.setViewControllers(navigationControllers, animated: false) 

El mismo process general se aplica si está utilizando storyboards.

Así que el punto que BSmith11 hizo sobre la adición de controlleres de navigation a un Tab Bar me hizo pensar. Así que hice un poco de Google y una respuesta en esta página, ayuda mucho: el controller de barra de tabs dentro de un control de uinavigation

Al tener el controller TabBar como rootViewController, al insert un "NavigationController" entre eso y el ViewController normal, puedo hacer esto:

  //Fix up the Navigation bar tint and set text colours to white [[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]]; [[UINavigationBar appearance] setBackgroundColor:[UIColor orangeColor]]; [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}]; //Also requires setting 'View controller-based status bar appearance' to NO in .plist [[UIApplication shanetworkingApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

Eso es exactamente lo que tenía antes, y eso me da un StatusBar de color y el mismo color NavBar. Ahora para ver si puedo agregarlo a la aplicación existente y no romper todo.

Plasma