web-dev-qa-db-fra.com

Comment désactiver les gros titres pour UINavigationBar?

J'ai un UITableView et une vue détaillée incorporés dans un UINavigationController en tant que tel:  enter image description here Je voudrais activer les gros titres pour "Mes notes", mais je voudrais le désactiver pour la vue détaillée. Quelque chose comme comment l'application Mail par défaut fonctionne sur iPhone. Comment pourrais-je changer la propriété prefersLargeTitle de la barre de navigation pendant cette transition? 

10
A Tyshka

J'ai eu le même problème tout à l'heure. 

Mon cas d'utilisation: 

MasterVC: barre de navigation de base sans grand titre 

DetailVC: largeTitle activé 

-> Lorsque je revenais au MasterVC depuis le DetailVC, je voyais une animation étrange montrant un titre large sur le maître pendant une seconde avant de revenir à la présentation de base non large. Cela ressemblait à un petit problème.

Je l'ai corrigé en suivant cette approche: 

Dans MasterVC - viewDidLoad

if #available(iOS 11.0, *) {
     navigationItem.largeTitleDisplayMode = .never
     navigationController?.navigationBar.prefersLargeTitles = false
}

En détailVC - viewDidLoad

if #available(iOS 11.0, *) {
     navigationItem.largeTitleDisplayMode = .always
     navigationController?.navigationBar.prefersLargeTitles = true
} 

J'espère que cela peut aider les autres.

3
Edouard Barbier

N'importe laquelle des deux solutions suivantes résoudra votre problème:

  1. set prefersLargeTitles à false pour votre barre de navigation

    self.navigationController?.navigationBar.prefersLargeTitles = false
    
  2. définissez largeTitleDisplayMode sur jamais pour navigationItem (remarque: prefersLargeTitles doit être false sinon, cela ne fonctionnera pas)

    self.navigationController?.navigationItem.largeTitleDisplayMode = .never
    

Remarque : si prefersLargeTitles est true, alors largeTitleDisplayMode = .never ne fonctionnera jamais. L’affichage du petit titre de la barre de navigation dépend de prefersLargeTitles

Cela activera le mode gros titre si sa valeur est true

self.navigationController?.navigationBar.prefersLargeTitles = true
3
Krunal

c'est très simple.

Dans votre DetailView vous devez définir navigationItem.largeTitleDisplayMode sur .never  

(pas navigationController? .navigationItem.largeTitleDisplayMode !!)

navigationItem.largeTitleDisplayMode = .never
2
    if #available(iOS 11.0, *) {
        self.navigationItem.largeTitleDisplayMode = UINavigationItem.LargeTitleDisplayMode.never
    } else {
        // Fallback on earlier versions
    }
0
A Tyshka

Il convient de noter que si vous définissez largeTitleDisplayMode sur jamais, et prefersLargeTitles sur false pour un détail ViewController, le petit titre continue à s'afficher pendant une seconde lorsqu'il passe du détail ViewController à la précédente ViewController via le bouton précédent UINavigationBar

Utilisez la fonction willMove(toParent:) pour changer le titre avant que la séquence soit effectuée.

Swift 4

override func willMove(toParent parent: UIViewController?) {
    navigationItem.largeTitleDisplayMode = .always
    navigationController?.navigationBar.prefersLargeTitles = true
}
0
Aaron