Große Titel zu kleinen Titel wechseln in der Navigationsleiste ist nicht glatt iOS 13, klebrig

11

Ich habe einen UINavigationControllermit Standardwert davon navigationBar.prefersLargeTitles = true.

Ich schalte das auf, falsewenn ich push in eine neue Szene gehe, nennen wir es ( DetailsViewController), indem ich es in die ändere viewWillDisappear.

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

Jetzt DetailsViewControllerbenutze ich willMove(to parent:).

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

Zurück zu großen Titeln.

Beachten Sie die angehängten Schnappschüsse, wie iOS 13 es mit iOS 12 macht, wenn man bedenkt, dass iOS 12 das richtige Verhalten ist.

iOS 13 :

iOS 13

iOS 12 :

iOS 12

Mohmmad S.
quelle
Sie müssen überhaupt nichts ändern, .prefersLargeTitleswenn Sie einen Detailansichts-Controller in den Navigationsstapel verschieben. Er verwendet automatisch einen kleinen Titel und kehrt dann, soweit ich weiß, zum großen Titel zurück, sobald Sie zum Stammansichts-Controller zurückkehren
Henrik-dmg
@ henrik-dmg Ich bin mir nicht sicher, ob es vorher so war, aber nicht mehr alles geht zu einem großen Titel, wenn ich das getan habe, ich habe das versucht.
Mohmmad S
1
largeTitleDisplayModezu. automaticund Sie sollten den gewünschten Übergang erhalten.
Harry J
@ HarryJ wo?
Mohmmad S
In Ihrem viewDidLoad oder NavigationscontrollernavigationController?.navigationItem.largeTitleDisplayMode = .automatic
Harry J

Antworten:

21

Was du tust war immer falsch. Sie sollten die Navigationsleiste prefersLargeTitlesauf trueeinmal einstellen und sie nie wieder berühren.

Die Möglichkeit, die Vorgehensweise jedes Ansichtscontrollers bei großen Titeln zu ändern, besteht darin, dass dieser Ansichtscontroller seine eigenen navigationItem(in seinen viewDidLoad) so festlegt , dass sie den gewünschten Wert haben largeTitleDisplayMode. Also, wenn der erste VC hat .alwaysund der zweite hat, wird .neveralles glatt sein.

matt
quelle
So eine gute Antwort! Ich wusste nie, dass dies der Weg ist, große und kleine Titel gleichzeitig zu haben!
Kacper Cz
0

Ich hatte das gleiche Problem und musste ein Navigationselement auf dem Storyboard des zweiten ViewControllers platzieren. Mein Navigationselement wurde automatisch vom Segue erstellt und prefersLargeTitledas viewDidLoad()Erstellen wurde nicht abgeschlossen, bevor die Ansicht angezeigt wurde. Das Hinzufügen eines Navigationselements zum Storyboard hat dieses Problem behoben und es mir ermöglicht, das prefersLargeTitleim Eigenschaftenmenü des Storyboards festzulegen .

Ben Hardin
quelle
0

In meinem Fall trat dieses Problem während eines Übergangs zu einem Ansichtscontroller auf, der ein Kind von a ist UITabBarController. Die Einstellung largeTitleDisplayModeauf dem untergeordneten Ansichtscontroller reichte nicht aus, um diesen Fehler zu beheben.

Ich habe durch das Hinzufügen eines Navigationspunkt zum UITabBarController Szene das Problem gelöst und Einstellung largeTitleDisplayModewie .neverdort.

Teo
quelle