iOS 7 UIStatusBarStyle Ocultar la barra de estado durante el lanzamiento de la aplicación.

Estoy actualizando mi aplicación para cambiar el color de mis barras de navigation de blanco a azul. Por lo tanto, quiero cambiar el color de la Barra de estado de negro a blanco. He intentado TODO desde la documentation de Apple, lo que me ayudó a cambiar el estilo de barra de estado para todos mis controlleres de vista en mi Storyboard.

Sin embargo, cualquier plumilla que empuje a que no está en mi Storyboard usando presentViewController cambia automáticamente el UIStatusBarStyle: aquí está mi código para el plumón:

NSString *url = @"https://twitter.com/Example"; NSString *title = @"Example"; SocialWebViewController *addController = [[[SocialWebViewController alloc] initWithURL:url title:title] initWithNibName:@"SocialWebView_iPhone" bundle:nil]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addController]; [self presentViewController:navigationController animated:YES completion:nil]; 

Ya he colocado el estilo preferido de UIStatusBar en mi AppDelegate, que FUNCIONA, PERO SOLO para los ViewControllers en mi StoryBoard:

 - (UIStatusBarStyle)prefernetworkingStatusBarStyle { return UIStatusBarStyleLightContent; } 

Y SÍ, ya lo he intentado:

(1) [[UIApplication shanetworkingApplication] setStatusBarStyle:UIStatusBarStyleDefault];

(2) [self setNeedsStatusBarAppearanceUpdate];

(3) Establezca UIViewControllerBasedStatusBarAppearance en YES en el plist

NINGUNO de esto funciona para esos Nibs que no están en mi StoryBoard.

OK ASÍ QUE FIGURÉ LO QUE USTED HA SIDO DICIENDO: CONFIGURACIÓN Ver la apariencia de la barra de estado basada en el controller NO HAYA SIDO TRABAJANDO PARA MÍ PORQUE MI BARRA DE ESTADO ESTÁ INICIALMENTE OCULTADA DURANTE EL LANZAMIENTO DE LA APLICACIÓN, QUE SE OCULTÓ TODO EL TIEMPO CUANDO FIJE UIViewControllerBasedStatusBarAppearance a "NO" … ¿Cómo soluciono esto?

En su file *-Info.plist configure las keys:

 UIStatusBarStyle = UIStatusBarStyleLightContent UIViewControllerBasedStatusBarAppearance = NO UIStatusBarHidden = YES 

Y en su AppDelegate agregue esta línea a la application:didFinishLaunchingWithOptions método application:didFinishLaunchingWithOptions :

 [[UIApplication shanetworkingApplication] setStatusBarHidden:NO]; 

Si desea que el estilo de la barra sea ligero en toda la aplicación, la forma más fácil es configurar UIViewControllerBasedStatusBarAppearance en NO y luego hacer

[[UIApplication shanetworkingApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

De lo contrario, simplemente establecer el prefernetworkingStatusBarStyle en UIViewController debería funcionar sin ninguna otra modificación.

 - (UIStatusBarStyle)prefernetworkingStatusBarStyle { return UIStatusBarStyleLightContent; } 

Mi sospecha es que está utilizando un UINavigationController / UITabBarController, etc. para mostrar el UIViewController. Si ese es el caso, necesitará subclass UINavigationController / UITabBarController para agregar el estilo correcto de la barra de estado, necesitará subclasss de estos controlleres para agregarles el método prefernetworkingStatusBarStyle. La implementación simple de tal cosa sería la siguiente

UINavigationControllerSubclass.h

 #import <UIKit/UIKit.h> @interface UINavigationControllerSubclass : UINavigationController @end 

UINavigationControllerSubclass.m

 #import "UINavigationControllerSubclass.h" @interface UINavigationControllerSubclass () @end @implementation UINavigationControllerSubclass - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (UIStatusBarStyle)prefernetworkingStatusBarStyle { return UIStatusBarStyleLightContent; } @end 

Simplemente use eso en lugar de UINavigationController y la barra de estado ahora debería ser ligera.

Siempre debes pensar en una stack de controlleres cuando se trata de este tipo de problema de interfaz de usuario. Dado que UINavigationController contiene el UIViewController si configura la propiedad de la barra de estado en el UIViewController, UINavigationController no lo conoce y conserva su propiedad original. Es por eso que crear una subclass de UINavigationController y configurar el estilo de la barra de estado allí soluciona todo. Si alguna vez te encuentras con este tipo de problemas, simplemente trata de recordar eso.