Il passaggio da titoli grandi a titoli piccoli nella barra di navigazione non è fluido iOS 13, appiccicoso


11

Ho un UINavigationControllervalore predefinito di esso navigationBar.prefersLargeTitles = true.

Lo sto passando a falsequando sono push in una nuova scena che consente di chiamarlo ( DetailsViewController), cambiandolo in viewWillDisappear.

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

Ora DetailsViewControllersto usando willMove(to parent:).

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

Per tornare a titoli di grandi dimensioni.

Osserva le istantanee allegate di come iOS 13 lo fa con come iOS 12 lo sta facendo, considerando che iOS 12 è il comportamento corretto.

iOS 13 :

iOS 13

iOS 12 :

iOS 12


Non è necessario cambiare .prefersLargeTitlesnulla quando si spinge un controller di visualizzazione dettagli nello stack di navigazione, utilizzerà automaticamente un titolo piccolo e poi tornerà a quello grande una volta tornato al controller di visualizzazione radice, per quanto ne so
henrik-dmg,

@ henrik-dmg Non sono sicuro che fosse così prima, ma non tutto va al massimo se lo facessi, l'ho provato.
Mohmmad S

1
largeTitleDisplayModeper . automatice dovresti ottenere la transizione desiderata.
Harry J,

@HarryJ dove?
Mohmmad S

A portata di vista DidLoad o controller di navigazione,navigationController?.navigationItem.largeTitleDisplayMode = .automatic
Harry J

Risposte:


21

Quello che stai facendo è sempre stato sbagliato. È necessario impostare prefersLargeTitlesper trueuna volta per la barra di navigazione e non toccare mai più.

Il modo per cambiare ciò che ciascun controller di visualizzazione fa per i titoli di grandi dimensioni come appare è che quel controller di visualizzazione imposta il proprio navigationItem(nel suo viewDidLoad) per avere il desiderato largeTitleDisplayMode. Quindi se il primo vc ha .alwayse il secondo ha .nevertutto sarà liscio.


Che bella risposta! Non ho mai saputo che fosse il modo di avere titoli grandi e piccoli allo stesso tempo!
Kacper Cz

0

Ho avuto lo stesso problema e ho dovuto posizionare NavigationItem sul secondo storyboard di ViewController. Il mio NavigationItem veniva creato automaticamente da segue e il suo prefersLargeTitlein viewDidLoad()non era finito prima della visualizzazione della vista. L'aggiunta di NavigationItem allo storyboard ha risolto questo problema e mi ha permesso di impostare prefersLargeTitlenel menu delle proprietà dello storyboard.


0

Nel mio caso questo problema si verificava in seguito a un controller di visualizzazione che è figlio di a UITabBarController. L'impostazione largeTitleDisplayModesul controller di visualizzazione figlio non è stata sufficiente per correggere questo errore.

Ho risolto il problema aggiungendo una voce di navigazione alla scena UITabBarController e l'impostazione largeTitleDisplayModecome .neverlì.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.