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


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.


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 .


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.