vistas vista ventana una parciales parcial net mvc modal llamar desde con como boton asp ios7 uinavigationbar statusbar

ios7 - ventana - iOS 7: la barra de estado del controlador de vista modal es de color incorrecto pero los controladores de vista normales son correctos



vistas parciales asp net mvc 5 (8)

Acabo de descubrir cómo hacer eso. Tuve exactamente el mismo problema y parece que funciona como un encanto.

Lo primero que debe hacer es cambiar un atributo en su archivo .plist de su proyecto a NO. El atributo es: "Ver apariencia de la barra de estado basada en el controlador". Si el atributo no existe, no dude en agregar uno nuevo exactamente como lo acabo de escribir (sin comillas).

La segunda cosa es agregar al método viewDidLoad de cada controlador de vista

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

si desea que el texto de su barra de estado sea blanco o

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];

si quieres que el texto de tu barra de estado sea negro.

¡Eso es todo!

Tengo un problema en iOS7 donde un controlador de vista empujado UINavigationController normal tiene el color de texto de barra de estado correcto para el color de barra de navegación UINavigationController (que es de un gris claro, casi blanco, por lo que el texto de la barra de estado es negro). Sin embargo, cuando se presenta un controlador de vista "modal" usando -presentViewController:animated:completion: el color del texto de la barra de estado cambia a blanco y es muy difícil de ver dado el color de la barra de navegación. El color de la barra de navegación es siempre el mismo en toda la aplicación y no cambia para cada controlador de vista. Esto ocurre en todas las llamadas a -presentViewController .

"Ver apariencia de la barra de estado basada en el controlador" está establecido en SÍ.

No estoy seguro de qué mirar para tratar de resolver esto.


Esto funciona. Pero no estoy contento con eso porque es un poco hacky. Creo que es un error que preferredStatusBarStyle no se llama para la vista modal. Preguntará a Apple.

- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; [self setNeedsStatusBarAppearanceUpdate]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; [self setNeedsStatusBarAppearanceUpdate]; }


Puede redefinir el método preferredStatusBarStyle en su clase de controlador de navegación

- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; // or UIStatusBarStyleBlackOpaque, UIStatusBarStyleBlackTranslucent, or UIStatusBarStyleDefault }

y también puede definir un "método de carga de vista" para establecer los colores personalizados que desee

- (void) viewDidLoad { UIColor *barColor = [UIColor whitecolor]; UIView *colorView = [[UIView alloc] initWithFrame:CGRectMake(0.f, -20.f, 320.f, 64.f)]; colorView.opaque = NO; colorView.alpha = .5f; colorView.backgroundColor = barColor; self.navigationBar.barTintColor = barColor; self.navigationBar.tintColor = [UIColor whiteColor]; [self.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}]; /*self.navigationController.navigationBar.barTintColor = [UIColor blackColor]; self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}]; self.navigationController.navigationBar.translucent = NO;*/ [self.navigationBar.layer insertSublayer:colorView.layer atIndex:0]; }


El controlador de navegación decide si tiene un contenido claro u oscuro según la propiedad barStyle su barra de barStyle . El valor predeterminado, UIBarStyleDefault , significa que la barra de navegación tiene un color claro y la barra de estado tendrá un contenido oscuro. Cambiar esta propiedad a UIBarStyleBlack realidad no hace que la barra de navegación sea negra (el color de la barra de navegación todavía se establece usando barTintColor ), pero le dice que tiene un color oscuro. El controlador de navegación decide que, dado que la barra de navegación está oscura, debe configurar el contenido de la barra de estado para que se ilumine.

Parece que en su controlador de navegación principal (en el que empuja cosas), barStyle está configurado en UIBarStyleBlack alguna parte. Debe hacer lo mismo con el controlador de navegación presentado de forma modal, así:

UINavigationController *newViewController = [[UINavigationController alloc] initWithRootViewController:modalViewController]; newViewController.navigationBar.barStyle = self.navigationController.navigationBar.barStyle; [self presentViewController:newViewController animated:YES completion:nil];


Después de haber revisado todas las respuestas proporcionadas aquí y en otras respuestas, he encontrado que la única solución que funcionó para mí fue crear una barra de navegación vacía para el controlador de vista que presento de manera modal.

Puede que esto no funcione para usted, pero funciona para mí por las siguientes razones:

  1. Mi cuadro de diálogo modal tiene una barra de navegación de todos modos (aunque no se usa para navegación, simplemente se usa para guardar o descartar los resultados).
  2. El color de la barra de estado ya se ha definido en toda la applicationDidFinishLaunching en applicationDidFinishLaunching como se explicó anteriormente, y tiene un color personalizado.

Es algo molesto desde el punto de vista de la ingeniería tener un controlador de navegación que efectivamente no hace nada, pero sin uno no pude superar este problema.


establezca UIViewControllerBasedStatusBarAppearance en NO en su info.plist


Estaba teniendo el mismo problema que tenías. El info.plist era correcto y en todos los demás lugares preferredStatusBarStyle se llamaba correctamente. Pero no en mi vista modal. Eso es porque preferredStatusBarStyle se envió al controlador de navegación. Así que hice una subclase de UINavigationController que transmitió preferredStatusBarStyle al controlador de vista que estaba presentando, y listo, todo se comportaba como debería hacerlo de nuevo


establezca YourModalViewControler.modalPresentationCapturesStatusBarAppearance en YES y mantenga "Ver apariencia de la barra de estado basada en el controlador" en SÍ.

- (void)viewDidLoad { [super viewDidLoad]; self.modalPresentationCapturesStatusBarAppearance = YES; .... }

luego sobrescribir preferredStatusBarStyle

- (UIStatusBarStyle)preferredStatusBarStyle { return TheStyleYouWant; }