Rimuovi il testo dal pulsante Indietro mantenendo l’icona

Voglio rimuovere il testo dal pulsante Indietro, ma voglio mantenere l’icona. Ho provato

let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil) navigationItem.leftBarButtonItem = backButton 

Tuttavia, questo rimuove completamente il testo e l’icona.

Il metodo di @ rmd2 è quasi corretto, ma dovresti selezionare la barra di navigazione del controller a cui punta il pulsante indietro e digitare " " nel campo Pulsante Indietro.

inserisci la descrizione dell'immagine qui

So che questo ha già una risposta, ma puoi anche farlo in codice (nel caso tu stia lavorando con pennini)

 navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) 

Aggiungi il precedente nel primo controller della vista.

Si noti che è necessario eseguire questa operazione per ciascun controller di visualizzazione che sta premendo. Quindi, se si dispone di 3 controller di visualizzazione e si desidera rimuovere il testo posteriore da tutti loro, sarà necessario aggiungere la riga nella visualizzazione dei controller 1 e 2.

Se si desidera rimuovere il titolo di un pulsante Indietro da un controller di visualizzazione pushed, diciamo to < in subSettingsViewController, quindi è necessario impostare il titolo BackBarButtonItem nel metodo viewWillDisappear () di SettingsViewController.

Objective-C:

 - (void)viewWillDisappear:(BOOL)animated [super viewWillDisappear:animated]; self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:self.navigationItem.backBarButtonItem.style target:nil action:nil]; } 

Swift:

 override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(true) navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) } 

Il testo del pulsante Indietro dipende dal titolo della vista principale.

Il trucco è cancellare il titolo se la vista principale scompare e impostarla nuovamente se viene mostrata di nuovo:

 override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(true) // needed to clear the text in the back navigation: self.navigationItem.title = " " } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "My Title" } 

Se vuoi la freccia indietro, in modo che il codice seguente venga inserito nel file AppDelegate nel metodo didFinishLaunchingWithOptions.

Per Swift

 let BarButtonItemAppearance = UIBarButtonItem.appearance() BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal) 

Ho risolto questo problema aggiungendo un “” sul titolo StoryBoard del precedente ViewController. Solo uno spazio, non vuoto; D

inserisci la descrizione dell'immagine qui

Finalmente trovato la soluzione perfetta.

Basta aggiungere un’immagine trasparente e aggiungere il codice seguente nel tuo AppDelegate.

 UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default) 

Nel mio caso, per icona e titolo personalizzati questo ha fatto il trucco (Swift 4)

  let imgBack = UIImage(named: "ic_back") navigationController?.navigationBar.backIndicatorImage = imgBack navigationController?.navigationBar.backIndicatorTransitionMaskImage = imgBack navigationItem.leftItemsSupplementBackButton = true navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil) 

Per Swift 4+ inserisci queste linee in AppDelegate su didFinishLaunchingWithOptions

 let BarButtonItemAppearance = UIBarButtonItem.appearance() BarButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal) BarButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default) 

Se si dispone di un ViewControllerA e si desidera accedere a ViewControllerB, nel ViewControllerA, è necessario impostare l’object navigationItem corrente con un nuovo UIBarButtonItem e il titolo su una stringa con spazio vuoto prima di passare a un altro controller di visualizzazione:

Imposta il titolo su una stringa con uno spazio vuoto, non puoi impostare nil o “” (stringa vuota) perché il valore predefinito è nullo

 let backItem = UIBarButtonItem() backItem.title = " " navigationItem.backBarButtonItem = backItem let controllerB = ViewControllerB() navigationController?.pushViewController(controllerB, animated: true) 
 let button: UIButton = UIButton (type: UIButtonType.Custom) button.setImage(UIImage(named: "imageName"), forState: UIControlState.Normal) button.addTarget(self, action: "backButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside) button.frame = CGRectMake(0, 0, 30, 30) let barButton = UIBarButtonItem(customView: button) self.navigationItem.leftBarButtonItem = barButton func backButtonPressed(btn : UIButton) { // Your code } 

Per me questo ha fatto il trucco:

 override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(true) self.navigationItem.title = " " } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "my amazing title" navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil) } 

Si noti che se si imposta il titolo senza modificare il backBarButtonItem, sembrerà che funzioni. Ma se provi a tornare usando un gesto e poi a cancellare e rimanere sul controller di visualizzazione spinto, il titolo torna indietro.

Lavorare in Swift 4

È necessario selezionare la barra di navigazione del controller DA a cui punta il pulsante indietro e digitare “” nel campo Pulsante Indietro.

ad esempio, se si sta spingendo un controller sul controller B, inserire spazi bianchi nella barra di navigazione del controller.

Per rimuovere da tutti i viewcontrollers in uno stack del controller di navigazione:

sottoclass UINavigationController e aggiungi questo:

 override func show(_ vc: UIViewController, sender: Any?) { setEmptyBackButton(vc) super.show(vc, sender: sender) } override func pushViewController(_ viewController: UIViewController, animated: Bool) { setEmptyBackButton(viewController) super.pushViewController(viewController, animated: animated) } func setEmptyBackButton(_ viewController: UIViewController) { viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) } 

A volte non funziona per cambiare solo il colore del titolo, nel caso in cui il titolo sia lungo. Perché potrebbe spostare il titolo della barra di navigazione a sinistra. Quindi, per impedirlo, potrebbe essere necessario spostare il titolo del pulsante della barra in orizzontale per renderlo trasparente:

 let barButtonItemAppearance = UIBarButtonItem.appearance() barButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal) barButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default) 

Ho usato questo codice nella funzione FInishLaunchingWithOptions di Appdelegate.

 if #available(iOS 11, *) { UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal) UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .highlighted) } else { UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default) } 

In Xcode 9.2 con Swift, ha funzionato in questo modo:

 override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(true) navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) } 

Nel caso in cui non abbiamo controllato il controller di visualizzazione precedente (cioè se stiamo lavorando in un framework), possiamo cancellare il titolo del pulsante Indietro come segue:

 // For iOS 10 navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = String() // For iOS 11 navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = nil 

Quello che fa è navigare fino all’ultimo elemento dello stack di navigazione ed eliminare il suo titolo posteriore. Assicurati di salvare quello originale quando verrà visualizzato il nostro controller di visualizzazione:

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) originalBackButtonTitle = navigationController?.navigationBar.items?.last?.backBarButtonItem?.title // Delete title somewhere here... } 

e quindi riassegnarlo, al fine di non interrompere nessuna parte dell’app:

 override func viewWillDisappear(_ animated: Bool) { navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = originalBackButtonTitle super.viewWillDisappear(animated) }