Плавный переход при смене панели навигации "prefersLargeTitles"

У меня есть контроллер вида, который pushed на стек навигации. Стек имеет navigationBar.prefersLargeTitles = trueВ то время как этот новый контроллер представления имеет navigationBar.prefersLargeTitles = false, Я добился этого, используя следующий код в контроллере представления, который помещается в стек:

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

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

Тем не менее, когда я возвращаюсь назад к представлению контроллера представления, изменение в панели навигации от navigationBar.prefersLargeTitles = false в navigationBar.prefersLargeTitles = true немного сбой Есть ли способ сделать это более гладким?

Большое спасибо

1 ответ

Решение

Вместо непосредственного изменения предпочтения с помощью контроллера навигации, вы должны изменить поведение с помощью элемента навигации конкретного контроллера представления, на который вы хотели бы повлиять.

class ViewControllerA: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        navigationItem.largeTitleDisplayMode = .always
    }
}

class ViewControllerB: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        navigationItem.largeTitleDisplayMode = .never
    }
}

Вы можете удалить строки, которые у вас есть в viewWillAppear а также viewWillDisappear,

Другие вопросы по тегам