У меня есть UINavigationController
значение по умолчанию navigationBar.prefersLargeTitles = true
.
Я переключаю это на то, false
когда я push
в новую сцену, давайте вызывать его ( DetailsViewController
), изменяя его на viewWillDisappear
.
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.navigationBar.prefersLargeTitles = false
}
Сейчас DetailsViewController
я использую willMove(to parent:)
.
override func willMove(toParent parent: UIViewController?) {
navigationController?.navigationBar.prefersLargeTitles = true
}
Для перехода к большим заголовкам.
Обратите внимание на прикрепленные снимки того, как iOS 13 делает это с тем, как iOS 12 делает это, считая, что iOS 12 - это правильное поведение.
iOS 13 :
iOS 12 :
.prefersLargeTitles
когда вы перемещаете контроллер подробного вида в стек навигации, он автоматически использует маленький заголовок и затем возвращается к большому, как только вы вернетесь к контроллеру корневого представления, насколько я знаю.largeTitleDisplayMode
кautomatic
и вы должны получить желаемый переход.navigationController?.navigationItem.largeTitleDisplayMode = .automatic
Ответы:
То, что ты делаешь, всегда было неправильно. Вы должны установить
prefersLargeTitles
наtrue
один раз для панели навигации и никогда не прикоснуться к ней снова.Способ изменить то, что каждый контроллер представления делает с большими заголовками, так как он появляется, состоит в том, что этот контроллер представления устанавливает свой собственный
navigationItem
(свойviewDidLoad
) для получения желаемогоlargeTitleDisplayMode
. Так что, если первый vc имеет,.always
а второй имеет.never
все будет гладко.источник
У меня была та же проблема, и мне пришлось поместить NavigationItem на раскадровку второго ViewController. Мой NavigationItem создавался автоматически Segue и ее
prefersLargeTitle
вviewDidLoad()
не была закончена до создания вид появился. Добавление NavigationItem в раскадровку исправило эту проблему и позволило мне установить ееprefersLargeTitle
в меню свойств раскадровки.источник
В моем случае эта проблема возникала во время перехода к контроллеру представления, который является дочерним для
UITabBarController
. УстановкаlargeTitleDisplayMode
на дочернем контроллере представления была недостаточна, чтобы исправить эту ошибку.Я решил эту проблему, добавив пункт навигации к UITabBarController сцены и настройки ,
largeTitleDisplayMode
как.never
там.источник