2014-10-13 12 views
16

Ho un UITableView e ha una barra di navigazione (ottenuta da UINavigationViewController), è in grado di tornare indietro facendo scorrere indietro con un dito.Come nascondere la barra di navigazione senza perdere la capacità di slide-back

Ho cercato di nascondere la barra di navigazione, ma mantenere la capacità di scorrimento-back, il codice:

- (void)viewWillAppear:(BOOL)animated { 
    [[self navigationController] setNavigationBarHidden:YES animated:YES]; 
} 

Questo nascosto con successo la barra di navigazione, però, non posso più scivolare di nuovo all'ultima schermata sia.

C'è un modo per nascondere la barra di navigazione ma mantenere l'abilità di scorrimento?

risposta

17

trovato la soluzione:

- (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; 
} 

E in .h file conformi alle UIGestureRecognizerDelegate

+1

Sta funzionando bene! Invece di impostare ** setNavigationBarHidden: YES **, in Incorpora in> Controller di navigazione, seleziona _UINavigationController_ e deseleziona ** Mostra barra di navigazione **. Togliendo la spunta, è possibile rimuovere il codice della barra di navigazione. –

+0

Questo non funziona quando si converte in swift – user7097242

6

Usa

self.navigationController.navigationBar.hidden = YES; 

o aggiungere questa linea in viewWillAppear:

self.navigationController.interactivePopGestureRecognizer.delegate = self; 

Sembra l'interazione non è efficace, aggiungendo questa linea e rendere il controller della vista conforme al protocollo UIGestureRecognizerDelegate renderà lavoro.

3

Assicurati di includere:

self.navigationController.navigationBar.hidden = YES; 

E:

self.navigationController.interactivePopGestureRecognizer.delegate = self; 

E:

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { 
     self.navigationController.interactivePopGestureRecognizer.enabled = YES; 
    } 

dovrebbe apparire come questo:

- (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; 
} 
+0

provato, non ha funzionato, ma grazie. –

+0

@ZinanXing, guarda le mie modifiche. – WMios

+0

Grazie per la modifica, assegna il delegato a se stesso, ma non implementa il metodo gestureRecognizerShouldBegin. Ho aggiunto la soluzione che funziona per me. Grazie per il tuo impegno, lo apprezzo. –

0

Se nascondere la barra di navigazione did't aiuto, provare a cambiare il rettangolo della barra di navigazione e vedere?

navBarBgFrame.origin.y = - navBarBgFrame.size.height;

33

Testato con Swift 2 la soluzione di @gabbler, se si utilizza

self.navigationController?.navigationBar.hidden = true 

Swift 3,0

self.navigationController?.navigationBar.isHidden = true 

invece di

self.navigationController?.navigationBarHidden = true 

il colpo indietro gesto funziona come un fascino !

+0

Per alcuni incredibilmente stupidi e bellissimi motivi questo funziona davvero. Potrebbe essere un bug in UIKit? – Entalpi

+0

Funziona anche in ogg-c! Chi lo sapeva. – iosjillian

+2

Nota che l'animazione di questo file è ** system-smooth ** in 'viewWillAppear:' e 'viewWillDisappear:' per disabilitare un 'UINavigationBar' in un particolare' UIViewController' all'interno di un 'UINavigationController' può essere una vera sfida, specialmente quando facendo 'viewWillDisappear:'. Per quel caso particolare, usiamo 'setNavigationBarHidden: animated:' ma disabilita anche 'interactivePopGestureRecognizer'. Nel mio caso particolare, non faccio quello che dice questa risposta, perché è difficile e molto buggato animare questa proprietà. –

1

per i moduli Xamarin ero lotta con questo modo prima non NavigationRenderer si otterrà navigationController nullo invece utilizzare 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; 

     } 
    } 
} 
Problemi correlati