Przełączanie dużych tytułów na małe tytuły na pasku nawigacyjnym nie jest płynne iOS 13, lepki

11

Mam UINavigationControllerdomyślną wartość tego navigationBar.prefersLargeTitles = true.

Zmieniam to na, falsekiedy push przechodzę do nowej sceny, pozwala to nazwać ( DetailsViewController), zmieniając ją na viewWillDisappear.

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

Teraz DetailsViewControllerużywam willMove(to parent:).

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

Aby wrócić do dużych tytułów.

Przestrzegać dołączonych migawek w jaki iOS 13 robi to z jak iOS 12 robi to, biorąc pod uwagę iOS 12 jest poprawne zachowanie.

iOS 13 :

iOS 13

iOS 12 :

iOS 12

Mohmmad S.
źródło
.prefersLargeTitlesWciskając kontroler widoku szczegółów do stosu nawigacyjnego, nie musisz się wcale zmieniać , automatycznie użyje małego tytułu, a następnie wróci do dużego, gdy wrócisz do kontrolera widoku głównego, o ile wiem.
henrik-dmg
@ henrik-dmg Nie jestem pewien, czy wcześniej tak było, ale już nie wszystko ma duży tytuł, jeśli to zrobiłem, próbowałem tego.
Mohmmad S
1
largeTitleDisplayModedo . automatici powinieneś uzyskać pożądane przejście.
Harry J,
@HarryJ gdzie?
Mohmmad S,
W zasięgu wzrokuDoadLoad lub kontroler nawigacyjny,navigationController?.navigationItem.largeTitleDisplayMode = .automatic
Harry J

Odpowiedzi:

21

To, co robisz, zawsze było złe. Powinieneś ustawićprefersLargeTitles , aby trueraz na pasku nawigacyjnym i nie dotykać go ponownie.

Sposób na zmianę tego, co każdy kontroler widoku robi z dużymi tytułami, jak się wydaje, polega na tym, że ten kontroler widoku ustawia własny navigationItem(w swoim viewDidLoad) pożądany largeTitleDisplayMode. Więc jeśli pierwszy vc ma, .alwaysa drugi ma .neverwszystko będzie gładkie.

matowy
źródło
Taka dobra odpowiedź! Nigdy nie wiedziałem, że w ten sposób można mieć jednocześnie duże i małe tytuły!
Kacper Cz
0

Miałem ten sam problem i musiałem umieścić element Nawigacja na drugim planie serii ViewController. Moja NavigationItem był tworzony automatycznie przez segue i jej prefersLargeTitlew viewDidLoad()nie ukończono tworzenia zanim pojawił się pogląd. Dodanie elementu nawigacyjnego do scenorysu rozwiązało ten problem i pozwoliło mi ustawić prefersLargeTitlew menu właściwości scenorysu.

Ben Hardin
źródło
0

W moim przypadku ten problem występował podczas segue do kontrolera widoku, który jest dzieckiem UITabBarController. Ustawienie largeTitleDisplayModekontrolera widoku potomnego nie wystarczyło, aby naprawić ten błąd.

Mam rozwiązać ten problem przez dodanie elementu nawigacyjnego na scenę UITabBarController i ustawienie largeTitleDisplayModejak .nevertam.

Teo
źródło