Большой заголовок к маленькому заголовку переключателя в панели навигации не гладкий iOS 13, липкий

11

У меня есть 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 13

iOS 12 :

iOS 12

Мохмад С
источник
Вам не нужно ничего менять, .prefersLargeTitlesкогда вы перемещаете контроллер подробного вида в стек навигации, он автоматически использует маленький заголовок и затем возвращается к большому, как только вы вернетесь к контроллеру корневого представления, насколько я знаю.
Хенрик-
@ henrik-dmg Я не уверен, было ли это так раньше, но теперь я перехожу к большому названию, если я так сделал, я попробовал это.
Мохмад С
1
largeTitleDisplayModeк automaticи вы должны получить желаемый переход.
Гарри
@HarryJ где?
Мохмад С
В вашем viewDidLoad или навигационном контроллереnavigationController?.navigationItem.largeTitleDisplayMode = .automatic
Harry J

Ответы:

21

То, что ты делаешь, всегда было неправильно. Вы должны установить prefersLargeTitlesна trueодин раз для панели навигации и никогда не прикоснуться к ней снова.

Способ изменить то, что каждый контроллер представления делает с большими заголовками, так как он появляется, состоит в том, что этот контроллер представления устанавливает свой собственный navigationItem(свой viewDidLoad) для получения желаемого largeTitleDisplayMode. Так что, если первый vc имеет, .alwaysа второй имеет .neverвсе будет гладко.

матовый
источник
Такой хороший ответ! Никогда не знал, что это был способ иметь большие и маленькие названия одновременно!
Kacper Cz
0

У меня была та же проблема, и мне пришлось поместить NavigationItem на раскадровку второго ViewController. Мой NavigationItem создавался автоматически Segue и ее prefersLargeTitleв viewDidLoad()не была закончена до создания вид появился. Добавление NavigationItem в раскадровку исправило эту проблему и позволило мне установить ее prefersLargeTitleв меню свойств раскадровки.

Бен Хардин
источник
0

В моем случае эта проблема возникала во время перехода к контроллеру представления, который является дочерним для UITabBarController. Установка largeTitleDisplayModeна дочернем контроллере представления была недостаточна, чтобы исправить эту ошибку.

Я решил эту проблему, добавив пункт навигации к UITabBarController сцены и настройки , largeTitleDisplayModeкак .neverтам.

Teo
источник