iphone - iconos - La presentación de la vista modal ocasionalmente oculta la barra de navegación.
navigation ios (4)
He encontrado esto dos veces ahora.
A veces usando la siguiente línea de código:
[self.navigationController presentModalViewController:aViewController animated:YES];
muestra la vista, pero la barra de navegación se oculta.
Puedo escribir:
[self.navigationController setNavigationBarHidden:NO];
Para mi contenido, en todas partes puedo pensar sin ningún efecto.
¿Alguien se ha topado con esto?
¿Estoy haciendo algo tonto?
@HeatMiser muestra una excelente manera de evitar el "error" que rodea la incapacidad de mostrar elementos en la barra de navegación. No estoy seguro, sin embargo, si esto es estrictamente un error en la presentación, ya que las operaciones modales deberían triunfar sobre el tema de la interfaz subyacente. Hacer que el tema de la operación modal imite el tema de la interfaz de usuario subyacente está bien, pero envolver la verdadera vista modal con una vista de navegación me parece mal (objeto de vista adicional solo para obtener un poco más de comportamiento).
En su lugar, lo siguiente funcionó para mí y da el mismo comportamiento que "Nuevo mensaje" en el programa de correo (en el iPhone).
En IB, coloque una barra de herramientas de la UIT en la parte superior de la pantalla modal (que simula la barra de navegación) con "Cancelar" y "Guardar" Elementos de botón de la barra de espacio flexible y un elemento de botón de la barra espaciadora flexible intermedia para que los botones se alineen a la izquierda y la derecha. Luego, agregue una UILabel centrada sobre la barra de herramientas (La fuente Helvética, en negrita, tamaño 18 parece coincidir con el título de la barra de navegación). Conecta los botones a IBAction''s en el UIViewController modal, y listo.
No, me encontré con esto también. El problema es que cuando presenta un controlador de vista modal con una clase basada en UIViewController, no extiende la barra de navegación del controlador de navegación que llama al modo modal. La vista modal cubre toda la pantalla. Lo que terminé haciendo para resolver el problema fue crear un UINavigationController y empujar la clase basada en UIViewController en él, y luego hacer presentModalViewController a la instancia del controlador de navegación.
me gusta:
UIViewController *vc = [[UIViewController alloc] init];
UINavigationController *cntrol = [[UINavigationController alloc] initWithRootViewController:vc];
[self presentModalViewController:cntrol animated:YES];
[cntrol release];
Eso me permitió tener una barra de navegación en la parte superior.
No estoy seguro de si eso ayudará en su caso particular, la única otra cosa que sugeriría es replicar el comportamiento del modal con un UIAnimation que se detenga 44px debajo de la parte superior del teléfono. Eso mantendría visible la barra de navegación original.
Si hay un controlador de navegación activo, entonces solo debes usar
[self.navigationController pushViewControllerAnimated: how];
para deslizar otro controlador de vista hacia adentro, mientras se entrega a usted y al usuario en una interfaz de usuario coherente completa con soporte de botón de retroceso "automático".
Una vez que el controlador de navegación está en uso, solo se debe presentar un controlador de vista modal para ampliar el área utilizable en la pantalla. Y luego, realmente debería usar una animación elegante para que el usuario sepa que se está alejando de la "tarea" o "pasos" que el controlador de navegación estaba incorporando.
Tal vez esto sea obvio, pero una vez que haya terminado con la vista modal y desee descartarla, debería hacer algo como esto en su vc modal:
[parentController dismissModalViewControllerAnimated: YES];
Donde parentController es una referencia a la vc desde donde está presentando la vista modal.