Grand titre à petit titre dans la barre de navigation n'est pas fluide iOS 13, collant

11

J'ai une UINavigationControllervaleur par défaut de c'est navigationBar.prefersLargeTitles = true.

Je passe cela à falsequand je push dans une nouvelle scène permet de l'appeler ( DetailsViewController), en le changeant en viewWillDisappear.

override func viewWillDisappear(_ animated: Bool) {
   super.viewWillDisappear(animated)
   navigationController?.navigationBar.prefersLargeTitles = false
}

Maintenant, DetailsViewControllerj'utilise willMove(to parent:).

override func willMove(toParent parent: UIViewController?) {
        navigationController?.navigationBar.prefersLargeTitles = true
}

Pour revenir aux grands titres.

Observez les instantanés ci-joints de la façon dont iOS 13 le fait avec la façon dont iOS 12 le fait, étant donné que iOS 12 est le comportement correct.

iOS 13 :

iOS 13

iOS 12 :

iOS 12

Mohmmad S
la source
Vous n'avez pas à changer .prefersLargeTitlesdu tout lorsque vous poussez un contrôleur de vue de détail vers la pile de navigation, il utilisera automatiquement un petit titre, puis reviendra au grand une fois que vous reviendrez au contrôleur de vue racine, pour autant que je sache
henrik-dmg
@ henrik-dmg Je ne sais pas si c'était comme ça avant, mais plus tout va au gros titre si je l'ai fait, j'ai essayé ça.
Mohmmad S
1
largeTitleDisplayModeà . automaticet vous devriez obtenir la transition souhaitée.
Harry J
@HarryJ où?
Mohmmad S
Dans votre viewDidLoad ou contrôleur de navigation,navigationController?.navigationItem.largeTitleDisplayMode = .automatic
Harry J

Réponses:

21

Ce que tu fais était toujours mal. Vous devez définir prefersLargeTitlesà la truefois pour la barre de navigation et de ne jamais toucher à nouveau.

La façon de changer ce que fait chaque contrôleur de vue sur les gros titres tel qu'il apparaît est que ce contrôleur de vue définit son propre navigationItem(dans son viewDidLoad) pour avoir le souhaité largeTitleDisplayMode. Donc, si le premier vc a .alwayset le second a .nevertout ira bien.

mat
la source
Une si bonne réponse! Je n'ai jamais su que c'était la façon d'avoir des titres grands et petits en même temps!
Kacper Cz
0

J'ai eu le même problème et j'ai dû placer un NavigationItem sur le deuxième storyboard de ViewController. Mon NavigationItem a été créé automatiquement par le Segue et son prefersLargeTitledans la viewDidLoad()n'a pas été fini de créer avant le point de vue est apparu. L'ajout d'un NavigationItem au storyboard a résolu ce problème et m'a permis de définir le prefersLargeTitledans le menu des propriétés du storyboard.

Ben Hardin
la source
0

Dans mon cas, ce problème se produisait lors d'une transition vers un contrôleur de vue qui est un enfant d'un UITabBarController. La configuration largeTitleDisplayModedu contrôleur de vue enfant n'était pas suffisante pour corriger ce bogue.

J'ai résolu le problème en ajoutant un élément de navigation à la scène UITabBarController et en le définissant largeTitleDisplayModecomme .neverlà-bas.

Teo
la source