framework - swift ios documentation
Cómo ocultar la barra de navegación sin perder la capacidad de retroceder (7)
Asegúrese de incluir:
self.navigationController.navigationBar.hidden = YES;
Y:
self.navigationController.interactivePopGestureRecognizer.delegate = self;
Y:
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
Debería aparecer así:
- (void)viewWillAppear:(BOOL)animated {
self.navigationController.navigationBar.hidden = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
return YES;
}
Tengo un UITableView y tiene una barra de navegación (obtenida de UINavigationViewController), puede retroceder deslizando hacia atrás con un dedo.
Intenté ocultar la barra de navegación pero conservo la capacidad de retroceso, código:
- (void)viewWillAppear:(BOOL)animated {
[[self navigationController] setNavigationBarHidden:YES animated:YES];
}
Esto ocultó con éxito la barra de navegación, sin embargo, tampoco puedo volver a la última pantalla.
¿Hay alguna forma de ocultar la barra de navegación pero mantener la capacidad de retroceso?
Encontró la solución:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// hide nav bar
[[self navigationController] setNavigationBarHidden:YES animated:YES];
// enable slide-back
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
return YES;
}
Y en el archivo .h, cumpla con UIGestureRecognizerDelegate
Probado con Swift 2 la solución de @gabbler, si usas
self.navigationController?.navigationBar.hidden = true
Swift 3.0
self.navigationController?.navigationBar.isHidden = true
en lugar de
self.navigationController?.navigationBarHidden = true
¡El gesto de deslizar hacia atrás funciona como un encanto!
Si ocultar la barra de navegación no ayudó, intente cambiar el rectángulo de la barra de navegación y vea?
navBarBgFrame.origin.y = - navBarBgFrame.size.height;
Utilizar
self.navigationController.navigationBar.hidden = YES;
o agregue esta línea en viewWillAppear:
self.navigationController.interactivePopGestureRecognizer.delegate = self;
Parece que la interacción no es efectiva, agregar esta línea y hacer que el controlador de vista se ajuste al protocolo UIGestureRecognizerDelegate lo hará funcionar.
para Xamarin Forms tuve problemas con esto, por lo tanto, primero, NavigationRenderer no obtendrá NavigationController null en lugar de usar PageRenderer:
[assembly: Xamarin.Forms.ExportRenderer(typeof(ContentPage), typeof(ContentPageRenderer))]
namespace sample
{
class ContentPageRenderer : PageRenderer
{
public override void ViewWillAppear(bool animated)
{
base.ViewDidAppear(animated);
var navctrl = this.ViewController.NavigationController;
navctrl.InteractivePopGestureRecognizer.Delegate = new UIGestureRecognizerDelegate();
navctrl.InteractivePopGestureRecognizer.Enabled = true;
}
}
}
Swift 4.xy iOS 11.4.
La solución @gabbler sigue funcionando. Idk, parece que esto es un error de UIKit, pero ..
Solo usa:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.isHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationController?.navigationBar.isHidden = false
}