web-dev-qa-db-fra.com

Le bouton Précédent de UINavigationController ne masque pas le titre sur iOS 11

J'ai mis à jour mon appareil vers iOS 11 bêta hier et mon application utilisant ce code dans AppDelegate pour masquer le titre du bouton de retour sur tous les écrans:

@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];
}

Cela fonctionne normalement sur les anciennes versions, mais lorsque je lance mon application sur iOS 11 Bêta, le titre du bouton de retour est toujours affiché . Quelqu'un est-il confronté à ce problème? Est-ce un bug de la version bêta d'iOS ou iOS 11 qui nécessite un autre moyen de masquer le titre du bouton de retour?

11
Son Hoang

J'avais déjà utilisé votre approche auparavant, mais malheureusement cela ne fonctionne plus. Après avoir essayé toutes les solutions possibles, c’est la seule chose que j’ai trouvée qui fonctionne sans problèmes ni bogues. Veuillez noter qu'il semble qu'il n'y ait plus de moyen universel de résoudre ce problème globalement pour tous les contrôleurs UIView.

  1. Appel

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

sur viewWillDisappear du contrôleur présentateur.

  1. Appel

    self.title = @"Title"
    

sur viewWillAppear du contrôleur présentateur.

Les autres solutions que j'ai essayées ont divers problèmes, par exemple: ils fonctionnent bien, mais tout se brise lorsque vous glissez un peu de l’Edge gauche.

6
CrazyJoeLv

Ce que je faisais dans iOS 11 consistait simplement à implémenter le protocole UINavigationControllerDelegate pour mes contrôleurs de navigation racine et à définir UIBarButtonItem "vierge" comme bouton de retour à chaque fois qu'un nouveau contrôleur serait affiché. Voici la version de Swift 4:

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

POUR Swift 3+

Utilisez le code ci-dessous pour prendre en charge iOS 9 à 11. 

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

Définir la couleur du texte du titre du bouton en clair est la méthode la plus propre que j'ai trouvée à appliquer à tous les écrans.

 UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
 UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted)
0
AFraser