view position modal-dialog ios7 navigationbar

view - Posición de la barra de navegación para la vista modal-iOS7



position modal-dialog (7)

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

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.

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.

¿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


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í.


Después de algunos intentos 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; }


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.


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. Agregue esto en viewWillAppear

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.


Para Swift3 use siguiendo ..

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


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

Usted conecta al delegado de su NavigationBar con su controlador de vista (configure su controlador de visualización 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<UIBarPositioning>)bar { return UIBarPositionTopAttached; }

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