Цвет заголовка панели навигации не изменяется в конкретном случае - PullRequest
0 голосов
/ 11 октября 2019

Изменение цвета заголовка в панели навигации не работает.

Существует UINavigationController.

Его rootViewController - это VC1. Цвет заголовка на панели навигации установлен на красный.

VC1 толкает VC2. Цвет заголовка на панели навигации установлен на зеленый.

Когда VC2 активирован, цвет заголовка на панели навигации устанавливается на красный. Однако цвет заголовка на панели навигации не меняется на красный и остается зеленым.

Контроллер навигации является своим собственным делегатом. Используя метод navigationController(_:willShow:animated), цвет плитки устанавливается на панели навигации.

extension NavigationController: UINavigationControllerDelegate {
    func navigationController(
        _ navigationController: UINavigationController,
        willShow viewController: UIViewController,
        animated: Bool
        ) {
        let attributes: [NSAttributedString.Key: Any] = [
            .foregroundColor: viewController is VC1 ? UIColor.red : UIColor.green
        ]
        navigationBar.titleTextAttributes = navigationBar.titleTextAttributes?.merging(attributes) { $1 }
    }
}

Ожидается - после того, как VC2 извлечен, цвет заголовка на панели навигации должен измениться на красный.

Факт. После того, как VC2 извлечен, цвет заголовка на панели навигации остается зеленым.

Кто-нибудь может указать, как решить эту проблему, чтобы цвет заголовка впанель навигации становится красной после того, как VC2 выскочил?

Ответы [ 3 ]

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

Если у обоих viewController включен большой заголовок. В противном случае используйте titleTextAttributes. Требуется, чтобы два из UINavigationController вашего ViewControllers delegate были NavigationController

extension NavigationController: UINavigationControllerDelegate {
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        if let _ = viewController as? ToViewController {
            let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.red]
            navigationController.navigationBar.largeTitleTextAttributes = textAttributes
        } else {
            let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.green]
            navigationController.navigationBar.largeTitleTextAttributes = textAttributes
        }
    }
}

Это сработало для меня. Оба моих viewControllers имеют большой заголовок.

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

Вы пытались изменить цвет оттенка навигацииBar?

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

Сделайте это в ViewDidLoad ()

let image = UIImage(named: "back")
        self.navigationController?.navigationBar.backIndicatorImage = image
        self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = image
        self.navigationItem.title = "Servicos"
        self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...