ios - volver - regresar a activity anterior android studio
Oculta la barra de navegación, pero cuando hago la transición a la vista anterior(aparece), muestra el botón de retroceso anterior temporalmente. ¿Por qué? (8)
Tengo controladores de vista en un controlador de navegación (root: RootViewController
, segundo: ReadingViewController
), pero en el segundo controlador de vista quiero deshabilitar la barra de navegación para una Barra de UIToolBar
(no necesito el título y quiero más botones, como en iBooks o la aplicación de Facebook). El problema es que cuando oculto la barra de navegación en la segunda vista, aparece aleatoriamente por un segundo de nuevo cuando abro el controlador de vista (retroceder).
Cuando abro el controlador de vista, el botón Atrás aparece por un segundo:
En el segundo controlador de vista viewWillAppear:
barra de navegación en viewWillAppear:
:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
También en el segundo controlador de vista, restauro la barra de navegación en viewWillDisappear:
:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// ... other stuff
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
Me pregunto cómo combate este problema para que los controladores de vista hagan una transición perfecta.
Bueno, según entiendo de su pregunta, el único problema de su enfoque actual es la aparición temporal del botón "Atrás" original. Entonces, ¿por qué no bloquear este botón para el controlador de vista?
self.navigationItem.hidesBackButton = YES;
Creo que podría ayudar. Pero para su tarea principal, prefiero sugerirle que use una barra de navegación personalizada con la capacidad de agregar tantos botones como desee. Este enfoque es más natural para iOS y probablemente nunca enfrentará los problemas que mencionó en su pregunta.
El problema aquí es que viewDidLoad
es demasiado pronto! Recuerde, viewDidLoad
no tiene nada que ver con la interfaz y la animación de inserción real. ¡ No significa que la vista de este controlador de vista esté a punto de aparecer en la pantalla! Simplemente significa que el controlador de vista ha obtenido su vista.
Realicé un video, que muestra lo que sucede en mi máquina cuando me muevo de un lado a otro entre dos controladores de vista en una interfaz de navegación, uno de los cuales muestra la barra de navegación, el otro no: youtu.be/PxpchytWQ4A
Para mí, eso es lo más coherente que obtendrás cuando muestres y ocultes la barra de navegación mientras empujas y haces pop. Aquí está el código que utilicé. El controlador de vista que oculta su barra de navegación es de la clase ViewController2. Este código está en el delegado de la aplicación:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
dispatch_async(dispatch_get_main_queue(), ^{
[(UINavigationController*)self.window.rootViewController setDelegate:self];
});
return YES;
}
-(void)navigationController:(UINavigationController *)nc
willShowViewController:(UIViewController *)vc
animated:(BOOL)animated
{
[nc setNavigationBarHidden:([vc isKindOfClass:[ViewController2 class]])
animated:animated];
}
Eso es todo lo que hice.
En el segundo controlador de vista, oculte la barra de navegación en viewWillAppear ::
self.navigationController.navigationBar.frame = CGRectMake(0, 0, 0, 0);
Para mostrar la barra de navegación, establezca el cuadro en viewWillDisappear:
self.navigationController.navigationBar.frame = CGRectMake(0, 0, 320, 44);
Hola Lo siguiente hecho mi trabajo
En FirstViewController
ponemos este método.
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
y en SecondViewController
ponemos este método
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
No he usado viewWillDisappear
para mi trabajo realizado.
La esperanza te ayudará.
MI problema es que cuando presiono un viewController con una barra de navegación en uno sin usar una transición personalizada moviéndolo desde el lado izquierdo, no puedo hacer que siga el cuadro del controlador de la segunda vista. Siempre cae desde arriba produciendo un efecto muy desagradable cuando realizo esta acción.
Oye, ¿por qué no usas la barra de navegación como una barra de UIToolbar
?
En lugar de ocultar UINavigation
, puede imitar el controlador de navegación a UITootlbar
agregándole botones.
Ocultarse ocultando UINavigation sería complejo.
Estoy subido el link Dropbox.
Podría ser tan simple como mover su código de viewWillDisappear
a viewDidDisappear
.
Además, evite utilizar animaciones en cualquier vista * los métodos de aparición, ya que la transición de vista ya se está animando.
Puede mostrar la barra de navegación, que lo hace aparecer en su controlador de vista principal, y luego cambiar la alfa de 0 a 1:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationController.navigationBar.hidden = NO;
self.navigationController.navigationBar.alpha = 0;
[UIView animateWithDuration:0.3 animations:^{
self.navigationController.navigationBar.alpha = 1;
}];
}