Come nascondere il pulsante 'Indietro' sulla barra di navigazione su iPhone?
-
03-07-2019 - |
Domanda
Ho aggiunto un controllo di navigazione per passare da una vista all'altra della mia app. Ma alcune delle visualizzazioni non dovrebbero avere il pulsante 'Indietro' (il titolo precedente). Qualche idea su come nascondere il pulsante Indietro?
Soluzione
Objective-C:
self.navigationItem.hidesBackButton = YES;
Swift:
navigationItem.hidesBackButton = true
Altri suggerimenti
Il modo migliore è combinarli, in modo da nascondere il pulsante Indietro anche se lo si imposta manualmente:
self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;
nascondi pulsante indietro con codice qui sotto ...
[self.navigationItem setHidesBackButton:YES animated:YES];
o
[self.navigationItem setHidesBackButton:YES];
Inoltre, se hai UINavigationBar
personalizzato, prova il seguente codice
self.navigationItem.leftBarButtonItem = nil;
Usa il codice:
self.navigationItem.backBarButtonItem=nil;
In Swift :
Aggiungi questo al controller
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.setHidesBackButton(true, animated: false)
}
Nella funzione viewDidLoad di UIViewController usa il codice:
self.navigationItem.hidesBackButton = YES;
Non dimenticare che è necessario chiamarlo sull'oggetto che ha il controller di navigazione. Ad esempio, se hai un controller di navigazione che preme su un controller della barra delle schede con un RootViewController, la chiamata self.navigationItem.hidesBackButton = YES
su RootViewController non farà nulla. Dovresti effettivamente chiamare self.tabBarController.navigationItem.hidesBackButton = YES
Non dimenticare che ora abbiamo la diapositiva per fare un gesto indietro. Probabilmente vuoi rimuovere anche questo. Non dimenticare di riattivarlo nuovamente se necessario.
if ([self.navigationItem respondsToSelector:@selector(hidesBackButton)]) {
self.navigationItem.hidesBackButton = YES;
}
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
Aggiungi questo codice nel tuo controller di visualizzazione
UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)];
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView];
self.navigationItem.leftBarButtonItem = btnL;
Per me nessuna delle precedenti sembrava funzionare, senza effetti visivi. Sto usando gli storyboard con una vista che è "incorporata" in un controller di navigazione.
Quindi a livello di codice aggiungo il mio menuItems e per qualche ragione il "backButton" è visibile quando si esegue il debug visivo della gerarchia di visualizzazione e l'icona MenuItem viene visualizzata sotto il pulsante "indietro" invisibile ".
Ho provato le impostazioni, come suggerito dai vari metodi di hook e questo non ha avuto effetto. Poi ho provato un approccio più brutale e ho ripetuto la sottoview che non ha avuto alcun effetto.
Ho controllato le dimensioni delle mie icone e mi è sembrato giusto. Dopo aver fatto riferimento alle linee guida dell'interfaccia umana di Apple, ho confermato che le mie icone sono corrette. (1 pixel più piccolo nel mio caso 24px 48px 72px).
La parte più strana è quindi la soluzione effettiva ...
Quando aggiungi l'elemento BarButton assegnagli un titolo con almeno un carattere , nel mio caso un carattere spazio.
Spero che questo aiuti qualcuno.
//left menu - the title must have a space
UIBarButtonItem *leftButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " <--THE FIX
style:UIBarButtonItemStylePlain
target:self
action:@selector(showMenu)];
leftButtonItem.image = [UIImage imageNamed:@"ic_menu"];
[self.navigationItem setLeftBarButtonItem:leftButtonItem];
Non ho funzionato per me in tutti i casi quando ho impostato
self.navigationItem.hidesBackButton = YES;
in viewWillAppear o ViewDidLoad, ma ha funzionato perfettamente quando l'ho impostato in init di viewController.
prova questo -
self.navigationController? .navigationItem.hidesBackButton = true
In c # o Xamarin.ios, this.NavigationItem.HidesBackButton = true;