Mam UINavigationController
domyślną wartość tego navigationBar.prefersLargeTitles = true
.
Zmieniam to na, false
kiedy 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 DetailsViewController
uż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 12 :
ios
swift
uinavigationcontroller
uinavigationbar
Mohmmad S.
źródło
źródło
.prefersLargeTitles
Wciskają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.largeTitleDisplayMode
do .automatic
i powinieneś uzyskać pożądane przejście.navigationController?.navigationItem.largeTitleDisplayMode = .automatic
Odpowiedzi:
To, co robisz, zawsze było złe. Powinieneś ustawić
prefersLargeTitles
, abytrue
raz 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 swoimviewDidLoad
) pożądanylargeTitleDisplayMode
. Więc jeśli pierwszy vc ma,.always
a drugi ma.never
wszystko będzie gładkie.źródło
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
prefersLargeTitle
wviewDidLoad()
nie ukończono tworzenia zanim pojawił się pogląd. Dodanie elementu nawigacyjnego do scenorysu rozwiązało ten problem i pozwoliło mi ustawićprefersLargeTitle
w menu właściwości scenorysu.źródło
W moim przypadku ten problem występował podczas segue do kontrolera widoku, który jest dzieckiem
UITabBarController
. UstawienielargeTitleDisplayMode
kontrolera widoku potomnego nie wystarczyło, aby naprawić ten błąd.Mam rozwiązać ten problem przez dodanie elementu nawigacyjnego na scenę UITabBarController i ustawienie
largeTitleDisplayMode
jak.never
tam.źródło