J'ai un UITableView et une vue détaillée incorporés dans un UINavigationController en tant que tel: 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?
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.
N'importe laquelle des deux solutions suivantes résoudra votre problème:
set prefersLargeTitles à false pour votre barre de navigation
self.navigationController?.navigationBar.prefersLargeTitles = false
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
c'est très simple.
Dans votre DetailView vous devez définir navigationItem.largeTitleDisplayMode sur .never
(pas navigationController? .navigationItem.largeTitleDisplayMode !!)
navigationItem.largeTitleDisplayMode = .never
if #available(iOS 11.0, *) {
self.navigationItem.largeTitleDisplayMode = UINavigationItem.LargeTitleDisplayMode.never
} else {
// Fallback on earlier versions
}
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.
override func willMove(toParent parent: UIViewController?) {
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
}