Posición de la barra de navegación para la vista modal – iOS7

En un controlador de navegación, obtiene automáticamente el color y la posición correctos de una barra de navegación como se esperaba.

Me gusta esto

enter image description here

Pero en la vista modal, cuando arrastras una barra de navegación, puedes ubicarla en la parte superior, que está demasiado cerca de la información de la portadora / batería.

enter image description here

Entonces puede arrastrarlo hacia abajo, adivinar hasta qué punto coincide con la posición del creado automáticamente, pero luego tiene una discrepancia de color. He intentado cambiar la configuración de la barra de estado en IB, no hace la diferencia.

enter image description here

¿Hay una manera correcta de superar esto, como hacer que una vista modal se parezca a la vista de navegación generada automáticamente?

Gracias

La mejor manera de superar esto en iOS 7 es ajustarse al nuevo protocolo UIBarPositioningDelegate .

Usted conecta el delegado de su NavigationBar con su controlador de vista (configure su controlador de vista como el delegado para la barra de navegación ya sea a través del guión gráfico o mediante código) y cumpla con ese protocolo y mediante la implementación del método

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

Puede eliminar la brecha superior en el controlador de vista. Debe colocar la barra 20 puntos debajo del borde superior

Encontré las 3 opciones para resolver este problema.

Opción 1: cambiar el tamaño de la barra de navegación

 float currentVersion = 7.0; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) { // iOS 7 self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 64); } 

Opción 2: Ocultar la barra de estado

Por ejemplo, en la vista modal en la que desea ocultar la barra de estado

Agrega este método

 - (BOOL)prefersStatusBarHidden { return YES; } 

En viewDidLoad add

 float currentVersion = 7.0; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) { [self prefersStatusBarHidden]; [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; } else { [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; } 

Ahora, cuando descarta la vista modal, y desea recuperar su barra de estado. Agregar esto a la vista MostrarAparecer

  float currentVersion = 7.0; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) { [self prefersStatusBarHidden]; [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; NSLog(@"ios7"); } else { [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide]; } 

y esto, pero devuelve NO esta vez

 - (BOOL)prefersStatusBarHidden { return NO; } 

Opción 3: incrustar en controlador Nav

Seleccione su vista modal, simplemente incrústela en un Controlador de navegación.

enter image description here

En Swift :

La mejor forma de superar esto en iOS 8.1 y Swift es ajustarse al nuevo protocolo UIBarPositioningDelegate.

Usted conecta el delegado de su NavigationBar a su controlador de vista y se ajusta a ese protocolo y llamando al método:

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

Puede eliminar la brecha superior en el controlador de vista. Debe colocar la barra 20 puntos debajo del borde superior.

Para Swift3 use siguiendo ..

 func position(for bar: UIBarPositioning) -> UIBarPosition{ return .topAttached; } 

Después de algunos bashs para mover la barra de navegación unos pocos píxeles hacia abajo en iOS 7, esto es lo que finalmente funcionó para mí:

 -(void)viewWillLayoutSubviews { float iosVersion = 7.0; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= iosVersion) { // iOS 7+ CGRect viewFrame = self.view.frame; viewFrame.origin.y += 10; self.view.frame = viewFrame; } } 

También ajusté el color de la barra de estado para adaptar mejor mi contenido:

 -(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; } 

Creé un Controlador de navegación, eliminé el “Controlador de vista de raíz” que apareció con él. Luego sostenga ctrl y arrastre el “Controlador de navegación” en su Vista (elimine la barra de navegación que agregó manualmente antes). Establezca el Controlador de navegación como “Controlador de vista inicial” y funciona bien para mí ahora.

Desactivé “Usar Autodesplazamiento” y funcionó para mí.

Intereting Posts