UINavigationBar Masquer le texte du bouton retour

104

Comment puis-je masquer le texte du bouton Retour d'un contrôleur UINavigation? Je n’aurai que le "<" et non le "<Back"

Nils
la source
1
vous ne pouvez pas modifier le texte par défaut, essayez plutôt navigationItem.leftBarButtonItem pour définir le bouton de retour personnalisé
BaSha
Voir ma réponse ci-dessous, si vous voulez une solution globale utilisant un proxy d'apparence.
fl034

Réponses:

107

Dans le générateur d'interface , vous pouvez sélectionner l'élément de navigation du contrôleur précédent et changer la Back Buttonchaîne en ce que vous souhaitez que le bouton de retour apparaisse. Si vous voulez qu'il soit vide, par exemple, mettez simplement un espace.

Vous pouvez également le modifier avec cette ligne de code:

[self.navigationItem.backBarButtonItem setTitle:@"Title here"];

Ou dans Swift :

self.navigationItem.backBarButtonItem?.title = ""

rebello95
la source
2
Astuce géniale, celle sur la définition d'un espace vide sur le constructeur d'interface ... :-D
Felipe Ferri
9
Le constructeur d'interface et les routes programmatiques Swift ne fonctionnaient pas pour moi dans XCode 8.3.2, Swift 3
agrippa
Vous pouvez consulter ma solution très simple pour masquer tous les boutons de retour dans l'application. PS: ne nécessite aucune ligne de code de votre choix
Pratik Jamariya
2
Si Back Buttonest déjà vide dans IB, ajoutez simplement un espace pour vous déplacer Backet affichez simplement la flèche.
Tejas K
3
Cette méthode ne fonctionne actuellement que dans le générateur d'interface. Définir cela à partir du code ne fonctionne pas, au lieu de définir uniquement le titre, vous devez définir tout le backBarButtonItem comme ceci: navigationItem.backBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, action: nil)
Leszek Szary
81

Vous pouvez également le faire via un storyboard. Dans l'inspecteur d'attributs de l'élément de navigation du contrôleur précédent, vous pouvez définir "" dans le champ du bouton Retour. Reportez-vous à l'image ci-dessous. Remplacez "Votre titre ici" par "". En faisant cela, vous obtiendrez le résultat souhaité. Vous n'avez plus besoin de jouer avec le «titre».

Vous pouvez utiliser par programme

[self.navigationItem.backBarButtonItem setTitle:@" "];

self fait référence au contrôleur qui pousse le contrôleur View souhaité.

Élément de navigation du contrôleur de vue Xcode

Exemple de barre de navigation avant, après

Avant Avant

Après Après

Shahzin KS
la source
7
Cela fonctionne parfaitement s'il est défini dans des storyboards. Assurez-vous simplement que la barre de navigation contient un élément de navigation afin de pouvoir le définir.
11
Dans iOS 9 / Xcode 7.3, la configuration du backBarButtonItemprogramme ne fonctionne pas, mais la configuration via le storyboard fonctionne.
Scott Gardner
@ScottGardner, la configuration fonctionne parbackBarButtonItem programmation pour moi dans iOS 9.
Suragch
Si vous n'avez pas de barre de navigation sur votre écran, peut-être parce qu'elle doit être masquée, vous pouvez ajouter un élément de navigation dans le storyboard, au contrôleur de vue précédent et définir son bouton de retour sur "".
Martin Berger
La solution a très bien fonctionné et très facile à implémenter dans Xcode 9.2 / iOS 11.
Ray Hunter
79

Vous pouvez implémenter UINavigationControllerDelegatecomme ceci:

Swift plus âgé

func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
    let item = UIBarButtonItem(title: " ", style: .Plain, target: nil, action: nil)
    viewController.navigationItem.backBarButtonItem = item
}

Swift 4.x

class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        let item = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
        viewController.navigationItem.backBarButtonItem = item
    }
}

backBarButtonItemest nilpar défaut et affecte le prochain contrôleur poussé, donc vous le définissez simplement pour tous les contrôleurs

VoidLess
la source
6
Je vous remercie! C'est la seule solution qui a fonctionné (sans rien gâcher) après avoir examiné 4 questions en double et des dizaines de réponses.
1616
1
J'avais déjà une sous-classe de contrôleur de navigation que j'ai transformée en son propre délégué, cela fonctionnait parfaitement. Devrait cependant mettre à jour pour Swift 3.
Dean Kelly
Excellente solution merci, la seule qui a fonctionné de manière cohérente pour moi.
Elliott Davies
Woks comme un charme.
tounaobun
48

Définir le titre du bouton de retour sur @""ou nilne fonctionnera pas. Vous devez définir le bouton entier vide (sans titre ni image):

Objectif c

[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]];

Rapide

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

Cela devrait être fait sur le contrôleur de vue qui se trouve au-dessus de votre contrôleur de vue dans la pile de navigation (c'est-à-dire à partir de l'endroit où vous naviguez vers votre VC via la pushViewControllerméthode)

chacal
la source
2
merci, ça marche! Dans swift: self.navigationItem.backBarButtonItem = UIBarButtonItem (title: "", style: .Plain, target: nil, action: nil)
mostworld77
excellente réponse .. souligne à juste titre que simplement changer le titre du backBarButtonItem par défaut ne suffira pas. Points bonus pour avoir mentionné que backBarButtonItem doit être défini dans le contrôleur de vue précédent.
Crazed'n'Dazed
30

Une autre solution à ce problème pour les situations où vous avez beaucoup de contrôleurs de vue consiste à utiliser un UIAppearanceproxy pour masquer efficacement le texte du titre du bouton de retour comme ceci:

UIBarButtonItem *navBarButtonAppearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];

[navBarButtonAppearance setTitleTextAttributes:@{
    NSFontAttributeName:            [UIFont systemFontOfSize:0.1],
    NSForegroundColorAttributeName: [UIColor clearColor] }
                                      forState:UIControlStateNormal];

Cette solution rendra le texte sous la forme d'un petit point clair, similaire à la définition manuelle du titre du bouton de retour sur @" ", sauf qu'elle affecte tous les boutons de la barre de navigation.

Je ne suggère pas cela comme une solution générale au problème, car cela affecte tous les boutons de la barre de navigation. Il renverse le paradigme afin que vous choisissiez quand afficher les titres des boutons, plutôt que quand masquer les titres.

Pour choisir quand afficher les titres, restaurez manuellement les attributs de texte de titre si nécessaire, ou créez une sous-classe spécialisée de UIBarButtonItemqui fait de même (potentiellement avec un autre UIAppearanceproxy).

Si vous avez une application dans laquelle la plupart des titres des boutons de retour doivent être masqués et que seuls quelques-uns (ou aucun) des boutons de navigation sont des boutons système avec des titres, cela pourrait être pour vous!

(Remarque: le changement de taille de police est nécessaire même si la couleur du texte est claire afin de garantir que les titres longs ne provoquent pas le décalage du titre de la barre de navigation centrale)

Adam Kaplan
la source
C'était la solution la plus simple pour ma mise en œuvre. Merci.
Trevor Panhorst
3
Cela ne couvre-t-il pas également les éléments du bouton de la barre de gauche qui ne sont pas des boutons de retour?
kevinl
1
Oui, je l'ai noté. "cela affecte tous les boutons de la barre de navigation"
Adam Kaplan
2
cela ne devrait-il pas affecter tous les autres boutons des barres de navigation, y compris les éléments des boutons de la barre gauche / droite?
Fyodor Volchyok
Oui, il n'a pas spécifié d'exigence plus complète.
Adam Kaplan
30

Ajoutez le code suivant dans viewDidLoad ou loadView

self.navigationController.navigationBar.topItem.title = @"";  

Je l'ai testé sur iPhone et iPad avec iOS 9

seul
la source
20
Cela n'a pas effacé le titre du contrôleur de vue précédent?
CalZone
6
Ne pas utiliser car cela supprimera le dernier titre de l'écran
evya
Si vous devez le faire à partir du contrôleur de vue actuel, pour éviter de supprimer le titre du vc précédent, vous devriez plutôt faire: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (titre: "", style: .plain, target: nil, action: nil)
Leszek Szary
15

Vous pouvez ajouter cette catégorie Objective-C pour que tous les boutons "Retour" créés par un contrôleur de navigation n'aient pas de texte. Je viens de l'ajouter à mon fichier AppDelegate.m.

@implementation UINavigationItem (Customization)

/**
 Removes text from all default back buttons so only the arrow or custom image shows up.
 */
-(UIBarButtonItem *)backBarButtonItem
{
    return [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
}

@end

PS - (je ne sais pas comment faire fonctionner cette extension avec Swift, il y avait des erreurs étranges. Modifications bienvenues pour ajouter une version Swift)

teradyl
la source
Cela donne le titre "Retour" pas cacher le titre
Raj Aggrawal
Vraiment, comment le faire overriderapidement. Question très intéressante
Andrey Gagan
@teradyl c'est la meilleure réponse.
aks.knit1108
@Andrey Gagan, voir ma réponse
Abirami Bala
Cela fonctionne sur iOS 9.0 - 10.3.3, mais sur iOS 11+ ne fonctionne pas.
Sihad Begovic
14

J'ai essayé certains ci-dessus et ci-dessous mais ils n'ont pas fonctionné. Cela a fonctionné pour moi:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.topItem?.title = ""
}
catanore
la source
1
Si vous devez le faire à partir du contrôleur de vue actuel, pour éviter de supprimer le titre du vc précédent, vous devriez plutôt faire: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (titre: "", style: .plain, target: nil, action: nil)
Leszek Szary
11

La seule chose qui fonctionne sans effets secondaires est de créer un bouton de retour personnalisé. Tant que vous ne fournissez pas d'action personnalisée, même le geste de diapositive fonctionne.

extension UIViewController {
func setupBackButton() {
    let customBackButton = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
    navigationItem.backBarButtonItem = customBackButton
}}

Malheureusement, si vous voulez que tous les boutons de retour dans le pour n'avoir aucun titre, vous devez configurer ce bouton de retour personnalisé dans tous vos contrôleurs de vue: /

override func viewDidLoad() {
    super.viewDidLoad()

    setupBackButton()
}

Il est très important que vous définissiez un espace comme titre et non une chaîne vide.

Cezar Signori
la source
9

pour supprimer le texte du bouton arrière par programme, utilisé sous Code, cela fonctionnera à partir de xcode7 et au-dessus.

self.navigationController.navigationBar.topItem.title = @ "";

ou

manualLy dans les storyboards, sélectionnez la barre de navigation sur le contrôleur de vue et mettez "" dans le texte du bouton précédent.

cela fonctionnera. Merci

Jyothi Babu Pakalz
la source
2
Celui-ci supprimera également la navigationItem title
Ilker Baltaci
J'ai édité votre réponse à ceci: self.navigationController?.navigationBar.topItem?.title = " "dans Xcode 9 et j'ai travaillé!
MHSFisher
Si vous devez le faire à partir du contrôleur de vue actuel, pour éviter de supprimer le titre du vc précédent, vous devriez plutôt faire: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (titre: "", style: .plain, target: nil, action: nil)
Leszek Szary
8

La réponse actuelle ne fonctionnait pas. Je voulais supprimer complètement le titre , mais le texte "retour" ne disparaissait pas.

Revenez au contrôleur de vue précédent et définissez sa propriété title:

self.title = @" ";

Fonctionne UNIQUEMENT lorsque le contrôleur de vue précédent n'a pas de titre

ChrisHaze
la source
@ZevEisenberg assurez-vous que la propriété est définie avant d'être affichée dans le cycle de vie du contrôleur de vue. Ce qui signifie le définir dans les méthodes viewDidLoad ou viewWillAppear.
ChrisHaze
1
Assurez-vous également d'inclure un espace entre les guillemets.
ChrisHaze
1
Cela a finalement fonctionné pour moi sans espaces; juste bon vieux chaîne vide: @"".
Zev Eisenberg
1
@ZevEisenberg, quand j'ai trouvé la solution pour la première fois, c'était plus tôt dans Xcode 5. Avec un espace était la seule façon de fonctionner, c'est pourquoi je l'ai inclus dans l'exemple de code. La mise à jour Xcode 6 doit l'avoir inclus. Bon à savoir - thx
ChrisHaze
J'ai également utilisé mon approche, qui fonctionne toujours, et j'ai également supprimé la flèche de retour standard.
ChrisHaze
5

Méthode alternative - utilisez la classe NavigationBar personnalisée.

class NavigationBar: UINavigationBar {

    var hideBackItem = true
    private let emptyTitle = ""

    override func layoutSubviews() {
        if let `topItem` = topItem,
            topItem.backBarButtonItem?.title != emptyTitle,
            hideBackItem {
            topItem.backBarButtonItem = UIBarButtonItem(title: emptyTitle, style: .plain, target: nil, action: nil)
        }

        super.layoutSubviews()
    }

}

Autrement dit, cela supprime tout le projet des titres. Définissez simplement une classe personnalisée pour UINavigationController.

LLIAJLbHOu
la source
4

Définissez le titre du VC précédent sur une chaîne "" avec un espace. et le titre avec le bouton de retour sera remplacé par une seule chaîne d'espace.

Self.title = " "

Sur Retour, appuyez à nouveau pour réinitialiser le titre à celui d'origine dans la vue.

Mohit Kumar
la source
4

Utilisez une personnalisation NavigationControllerqui remplacepushViewController

class NavigationController: UINavigationController {  
  override func pushViewController(_ viewController: UIViewController, animated: Bool) {
    viewController.navigationItem.backBarButtonItem =
      UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    super.pushViewController(viewController, animated: animated)
  }
}
onmyway133
la source
4

Beaucoup de réponses déjà, voici mes deux cents sur le sujet. J'ai trouvé cette approche vraiment robuste. Il vous suffit de le mettre dans viewController avant de segue.

Swift 4:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
Codetard
la source
2
Oui! Merci :)
Hews
3

J'ai tout essayé dans ce post. La seule solution de travail est @ VoidLess

Voici la même réponse mais plus complète

class CustomNavigationController: UINavigationController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.delegate = self
    }
}


// MARK:UINavigationControllerDelegate
extension CustomNavigationController {
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
    }
}
Christos Chadjikyriacou
la source
3

C'est ma résolution pour iOS11, je change l'apparence de UIBarButtonItem dans applicationDidFinishLaunchingWithOptions:

UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-100, 0), for:UIBarMetrics.default)

Vous ne pouvez pas modifier le décalage Y, car cela modifiera également la position du bouton de la barre arrière dans iOS11, mais c'est OK dans iOS10 et les versions antérieures.

VictorChee
la source
1
Cela fonctionne mais pendant l'animation, vous pouvez voir le titre précédent se déplacer sur la gauche. Cela a l'air un peu bogué.
Jonathan le
2

Dans Swift3,

Si vous définissez le paramètre global

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // ..

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


    // ...

}
taku_oka
la source
1
Notez que cela changera également la couleur en transparent pour tous les autres boutons de la barre que vous pourriez avoir quelque part dans votre application, pas seulement les boutons de retour.
Leszek Szary
2

Swift 3.1 Vous pouvez le faire en implémentant la méthode déléguée de UINavigationController.

func navigationController(_ navigationController: UINavigationController, 
                          willShow viewController: UIViewController, animated: Bool) {

    /** It'll hide the Title with back button only,
     ** we'll still get the back arrow image and default functionality.
     */
    let item = UIBarButtonItem(title: " ", style: .plain, target: nil, 
                               action: nil)
    viewController.navigationItem.backBarButtonItem = item
}
SMMoinuddin. Shuvo
la source
La meilleure réponse!
evya
2

Pour ceux qui souhaitent masquer globalement le titre du bouton précédent.

Vous pouvez SWIZZLE viewDidLoadde UIViewControllerce genre.

+ (void)overrideBackButtonTitle {

    NSError *error;

    // I use `Aspects` for easier swizzling.

    [UIViewController aspect_hookSelector:@selector(viewDidLoad)
                              withOptions:AspectPositionBefore
                               usingBlock:^(id<AspectInfo> aspectInfo)
    {

        UIViewController *vc = (UIViewController *)aspectInfo.instance;

        // Check whether this class is my app's view controller or not.
        // We don't want to override this for Apple's view controllers,
        // or view controllers from external framework.

        NSString *className = NSStringFromClass([vc class]);
        Class class = [NSBundle.mainBundle classNamed:className];
        if (!class) {
           return;
        }

        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
        vc.navigationItem.backBarButtonItem = backButton;

    } error:&error];

    if (error) {
        NSLog(@"%s error: %@", __FUNCTION__, error.localizedDescription);
    }

}

Usage:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[self class] overrideBackButtonTitle];
    return YES;
}
nRewik
la source
2

Si vous ciblez iOS 13 et versions ultérieures, vous pouvez utiliser cette nouvelle API pour masquer globalement le titre du bouton Précédent .

let backButtonAppearance = UIBarButtonItemAppearance()
backButtonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.clear]

UINavigationBar.appearance().standardAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().compactAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().scrollEdgeAppearance.backButtonAppearance = backButtonAppearance
fl034
la source
1
Ce n'est pas optimal. Si un utilisateur appuie sur l'étiquette avec le texte clair, l'action de retour est toujours déclenchée.
dvdblk
1

J'avais du mal avec cela parce que j'avais un contrôleur de navigation personnalisé. J'ai pu supprimer le texte de l'élément arrière dans tous les contrôleurs de vue avec ce code dans ma classe de contrôleur de navigation personnalisé override func viewDidLayoutSubviews() { self.navigationBar.backItem?.title = "" }

Cela supprime tous les titres des éléments arrière à l'aide de ce contrôleur de navigation personnalisé.

Amy.R
la source
1
Mise à jour pour ceci: cela fonctionne mais il y a un décalage étrange dans le chargement qui me dérange. J'ai maintenant ajouté ceci 'let BarButtonItemAppearance = UIBarButtonItem.appearance () BarButtonItemAppearance.setTitleTextAttributes ([NSAttributedStringKey.foregroundColor: UIColor.clear], pour: .normal)' dans le délégué App fonctionne parfaitement, et
Amy.R
0

Dans iOS 11, nous avons constaté que la définition de UIBarButtonItemla police / couleur du texte d'apparence sur une très petite valeur ou une couleur claire entraînerait la disparition d'un autre élément de la barre (le système n'honore plus la classe de l'élément UIBarButton, il le convertira en_UIModernBarButton ). Le réglage du décalage du texte arrière sur hors écran entraînera un flash pendant le pop interactif.

Alors nous avons balancé addSubView:

+ (void)load {
    if (@available(iOS 11, *)) {
        [NSClassFromString(@"_UIBackButtonContainerView")     jr_swizzleMethod:@selector(addSubview:) withMethod:@selector(MyiOS11BackButtonNoTextTrick_addSubview:) error:nil];
    }
}

- (void)MyiOS11BackButtonNoTextTrick_addSubview:(UIView *)view {
    view.alpha = 0;
    if ([view isKindOfClass:[UIButton class]]) {
        UIButton *button = (id)view;
        [button setTitle:@" " forState:UIControlStateNormal];
    }
    [self MyiOS11BackButtonNoTextTrick_addSubview:view];
}
sbhhbs
la source
0
-(void)setNavigationItems{
     UIBarButtonItem *leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"**Your title here**" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonClicked)];   
     self.navigationController.navigationBar.topItem.backBarButtonItem=leftBarButtonItem;
}
-(void)backButtonClicked{
    [self.navigationController popViewControllerAnimated:YES];
}
niku
la source
0

Le texte arrière provient du dernier View du contrôleur de vue navigationItem.titleet navigationItem.titleest automatiquement défini par self.title. Un moyen si simple de résoudre le problème est le crochet setTitle:, assurez-vousnavigationItem.title = @""

Mettez ce code à AppDelegate.mça va faire ça。

    [UIViewController aspect_hookSelector:@selector(setTitle:)
                              withOptions:AspectPositionAfter
                               usingBlock:^(id<AspectInfo> aspectInfo, NSString *title) {
        UIViewController *vc = aspectInfo.instance;
        vc.navigationItem.titleView = ({
            UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
            titleLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
            titleLabel.text = title;
            titleLabel;
        });
        vc.navigationItem.title = @"";
    } error:NULL];

Plus de détails sur https://www.jianshu.com/p/071bc50f1475(Simple Chinease)

fengxing
la source
0

Ma solution: - XCode: 10.2.1 - Swift: 5

  • Contrôleur de vue parent:
    • self.title = ""
  • Contrôleur de vue enfant:
    • self.navigationItem.title = "Votre titre" // pour définir le titre du contrôleur de vue
PhuocLuong
la source
0

XCode 11.5 Swift 5

Une manière très simple - bien que peut-être un peu hacky - de faire cela par programme si vous n'avez pas besoin du bouton de retour personnalisé est de définir la taille de la police égale à zéro dans le contrôleur de vue que vous poussez sur la pile, en appelant quelque chose comme ça depuis viewDidLoad

private func setupNavBar() {
    let appearance = UINavigationBarAppearance()
    appearance.configureWithDefaultBackground()
    
    let backButtonAppearance = UIBarButtonItemAppearance()
    backButtonAppearance.normal.titleTextAttributes = [.font: UIFont(name: "Arial", size: 0)!]
    appearance.backButtonAppearance = backButtonAppearance

    navigationItem.standardAppearance = appearance
    navigationItem.scrollEdgeAppearance = appearance
    navigationItem.compactAppearance = appearance
}
Pakchoiandbacon
la source
-1

Enfin trouvé la solution parfaite pour masquer le texte de retour par défaut dans toute l'application.

Ajoutez simplement une image transparente et ajoutez le code suivant dans votre AppDelegate.

UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default)
Lalit Kumar
la source
-2

La méthode suivante fonctionne sur iOS 11 et est sûre de ne pas planter sur les autres versions iOS. Cela pourrait entraîner le rejet de votre application dans l'examen de l'App Store, car UIModernBarButton et UIBackButtonContainerView sont des API privées. Placez dans AppDelegate.

    if
        let UIModernBarButton = NSClassFromString("_UIModernBarButton") as? UIButton.Type,
        let UIBackButtonContainerView = NSClassFromString("_UIBackButtonContainerView") as? UIView.Type {

        let backButton = UIModernBarButton.appearance(whenContainedInInstancesOf: [UIBackButtonContainerView.self])
        backButton.setTitleColor(.clear, for: .normal)
    }
Patrick
la source
Cela pourrait entraîner le rejet de votre application dans l'examen de l'App Store, car UIModernBarButton et UIBackButtonContainerView sont des API privées.
Groot
Merci @Groot, a ajouté votre avertissement.
Patrick
-5

Version Swift, fonctionne parfaitement globalement:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)

        return true
    }
PeiweiChen
la source
7
Vous devez ajouter que cela masquera également tout le texte rightBarButtons et leftBarButtons, qui ne reviennent pas en arrière.
limfinity
ce n'est pas un solution. Comme @limfinity l'a souligné, cela le changera universellement pour tous les UIBarButtonItem de l'application
Danut Pralea
Je suis d'accord avec @limfinity et Danut Pralea, il masquera tout le texte de UIBarButtonItem dans toute l'application
Pratik Jamariya