objective framework developer apple apis ios objective-c xcode

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 }