Почему появление UIViewController меняет titleTextAttributes navigationItem? - PullRequest
0 голосов
/ 16 ноября 2018

Я создаю социальную сеть, которая позволяет пользователям переходить от одного профиля к другому, просматривая, за кем они следят.Для простоты я создал тестовый проект с двумя контроллерами представления: ViewController и SecondViewController.

. Каждый контроллер представления имеет кнопку, которая запускает IBAction для создания экземпляра следующего контроллера представления.Это представление затем помещается в стек навигации.Пользователь может делать это до тех пор, пока существует другой viewController, который нужно нажать.Но когда они начинают возвращаться / высовываться, это когда у меня возникают проблемы.

Вот ViewController:

class ViewController: UIViewController {
    @IBOutlet weak var pageNumberLabel: UILabel!

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

        self.navigationItem.title = "First"
        setUp()
    }

    func setUp() {
        print("Setup 1")

        let navBarAppearance = self.navigationController!.navigationBar
        navBarAppearance.setBackgroundImage(UIImage(), for: .default)
        navBarAppearance.shadowImage = UIImage()
        navBarAppearance.barStyle = .black
        navBarAppearance.isTranslucent = true
        navBarAppearance.tintColor = .white
        navBarAppearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
        self.navigationController?.view.backgroundColor = UIColor.lightGray
    }

    @IBAction func pushSecondViewController() {
        if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "secondVC") as? SecondViewController {
            print("-")
            self.navigationController?.pushViewController(vc, animated: true)
        }
    }
}

Вот SecondViewController:

class SecondViewController: UIViewController {
    @IBOutlet weak var pageNumberLabel: UILabel!

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

        self.navigationItem.title = "Second"
        setUp()
    }

    func setUp() {
        print("Setup 2")

        let navBarAppearance = self.navigationController!.navigationBar
        navBarAppearance.isTranslucent = false
        navBarAppearance.barTintColor = .white
        navBarAppearance.tintColor = .blue
        navBarAppearance.barStyle = .black
        navBarAppearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.blue]
    }

    @IBAction func pushFirstViewController() {
        if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "firstVC") as? ViewController {
            print("-")
            self.navigationController?.pushViewController(vc, animated: true)
        }
    }
}

Когда выскочил SecondViewController, а ViewController -представлен, навигационный заголовок остается UIColor.blue.Однако, если я проведу пальцем от SecondViewController к ViewController, заголовок будет корректно менять цвета.

Почему это так?

1 Ответ

0 голосов
/ 16 ноября 2018

Я нашел решение этой проблемы ... первоначально размещено здесь . Я добавил следующий код в мою функцию setUp() для панели навигации.

let titleView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
titleView.backgroundColor = UIColor.clear
let titleLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
titleLabel.textAlignment = .center
titleLabel.text = [My View Name]
titleLabel.textColor = .blue
titleView.addSubview(titleLabel)
self.navigationItem.titleView = titleView
self.navigationItem.title = [My View Name]
...