señal - desaparece barra de estado iphone
Mostrar/ocultar la barra de navegación con animación suave (3)
Tengo una aplicación basada en navegación. La primera vista (rootcontroller) comienza con tres botones grandes solamente. Sin barra de navegación A partir de ahí, todo lo demás son tablas y tienen barras de navegación. Estoy haciendo esto para mostrar / ocultar la barra de navegación:
MyAppAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.navigationController.navigationBar.hidden = NO;
Una vez que abandone el controlador raíz, la barra de navegación se colocará en su lugar y se colocará sobre la vista de tabla, en lugar de presionarla hacia abajo. Recorta la parte superior de la tabla. Volver al controlador raíz no es uniforme en cómo desaparece la barra de navegación. ¿Hay una manera más suave / mejor de lograr ocultar la barra de navegación solo para el controlador raíz?
Puede usar [navigationController setNavigationBarHidden: YES animated:YES]
para ocultar la barra sin problemas
Este pequeño código anima la barra de navegación que se esconde sin problemas de UI:
[navigationController setNavigationBarHidden: YES animated:YES]
Pero...
- Use la propiedad self.navigationController.navigationBarHidden para verificaciones en el código en lugar de la propiedad self.navigationController.navigationBar.hidden . Esto le ahorrará mucho dolor debido a problemas inesperados de posicionamiento de la interfaz de usuario.
- Tenga cuidado de colocar este método en - (void) viewWillAppear: (BOOL) animado o más adelante en el ciclo de vida de la vista. Esto se recomienda porque si lo haces en - (void) viewDidLoad por ejemplo, obtendrás una fea vista rectangular negra durante las animaciones desde una vista que muestra su barra de navegación a una vista que no lo hace. Por ejemplo, si su vista de inicio tiene su barra de navegación oculta pero todos sus elementos secundarios tienen la barra de navegación mostrada, cuando aparezca en la vista de inicio, la animación mostrará una barra negra en lugar de la barra de navegación hasta que finalice la animación
Puede personalizar la animación y la duración de la barra de navegación con los siguientes métodos. Le proporcionará una devolución de llamada una vez que se complete la animación.
// pass a param to describe the state change, an animated flag and a completion block matching UIView animations completion
- (void)setNavigationBarVisible:(BOOL)visible animated:(BOOL)animated completion:(void (^)(BOOL))completion {
// fail if the current state matches the desired state
if ([self navigationBarIsVisible] == visible) return completion(YES);
// get a frame calculation ready
CGFloat nheight = self.navigationController.navigationBar.frame.size.height;
CGFloat noffsetY = (visible)? -nheight : nheight;
// zero duration means no animation
CGFloat duration = (animated)? 0.3 : 0.0;
[UIView animateWithDuration:duration animations:^{
CGRect nframe = self.navigationController.navigationBar.frame;
self.navigationController.navigationBar.frame = CGRectOffset(nframe, 0, noffsetY);
} completion:completion];
}
// know the current state of the navigation bar
- (BOOL)navigationBarIsVisible {
return self.navigationController.navigationBar.frame.origin.y < CGRectGetMinY(self.view.frame);
}
// Show or Hide navigation bar
[self setNavigationBarVisible:![self navigationBarIsVisible] animated:YES completion:^(BOOL finished) {
NSLog(@"navigation bar finished");
}];