Проблема с большим заголовком UINavigationBar при отображении на небольшую полупрозрачную полосу - PullRequest
1 голос
/ 15 октября 2019

Я реализую UINavigationBar для двух UIViewController: предположим, что ControllerA и ControllerB.

ControllerA имеет полупрозрачный UINavigationBar со свойством backgroundColor = .clear.

ControllerB имеет prefersLargeTitles свойство и белый фон.

Я должен нажать и выскочить из ControllerA -> ControllerB . Вот код, который я реализовал в controllerA методах жизненного цикла:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        if #available(iOS 11.0, *) {
            navigationItem.largeTitleDisplayMode = .never
        }

        navigationController?.navigationBar.isTranslucent = true
        navigationController?.navigationBar.tintColor = .white
        navigationController?.navigationBar.backgroundColor = UIColor.clear

        navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        navigationController?.navigationBar.shadowImage = UIImage()
        navigationController?.navigationBar.barTintColor = .clear

        navigationController?.navigationBar.titleTextAttributes = [
            .font: FontFamily.SFProRounded.bold.font(size: 18),
            .foregroundColor: UIColor.white
        ]
    }

override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        if #available(iOS 11.0, *) {
            navigationController?.navigationBar.prefersLargeTitles = true
            navigationItem.largeTitleDisplayMode = .always

            navigationController?.navigationBar.largeTitleTextAttributes = [
                .font: FontFamily.SFProRounded.bold.font(size: 22),
                .foregroundColor: UIColor.black
            ]
        }
        navigationController?.navigationBar.titleTextAttributes = [
            .font: FontFamily.SFProRounded.bold.font(size: 18),
            .foregroundColor: UIColor.black
        ]
        navigationController?.navigationBar.tintColor = .black
        navigationController?.navigationBar.backgroundColor = UIColor.white
        navigationController?.view.backgroundColor = UIColor.white
        navigationController?.navigationBar.barTintColor = .white
    }

Ниже проблемы, с которыми я столкнулся в разных версиях iOS:

  1. Версия

Неправильная анимация и цвет заголовка при нажатии кнопки «Назад» для закрытия контроллера. Видео здесь: https://youtu.be/1g9esUgYDK8

Версия == iOS 13

Большой заголовок не перемещается с отключенным контроллером во время анимации поп-музыки. Видео тут: https://youtu.be/25k3oz2_wcE

Как это решить? Заранее спасибо

1 Ответ

0 голосов
/ 23 октября 2019

Наконец, я добавил

if #available(iOS 11.0, *) {
    navigationItem.largeTitleDisplayMode = .always
}

в ViewDidLoad из ControlBB и

if #available(iOS 11.0, *) {
    navigationItem.largeTitleDisplayMode = .never
}

в ViewDidLoad из ControllerA и все работает как я ожидал.

Обратите внимание, что вам нужно установить prefersLargeTitles только один раз, желательно при открытии приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...