Как установить название навигационной панели в Swift? [дубликат]

этот вопрос уже есть ответ здесь:

я пытаюсь установить заголовок Navigation Bar в Swift, я поставил Tab Bar и Navigation Bar ничего не отображается, нет кнопки, нет заголовка, ничего. Я использовал код, но это не работает, пока я использую Tab Bar, и когда я удалить Tab Bar, код работает и все ок с Navigation Bar, отображается заголовок и отображаются кнопки.

код, который я использовал для заголовка:

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationItem.title = "My Title"

}

и Main.storyboard я подключил Navigation Controller С Tab Bar Controller, как на фото.

enter image description here

Итак, как это исправить ? Проблема в том, что Navigation Bar не работает при использовании Tab Bar.

3 ответов


С Tab Bar на самом деле Root View Controller на Navigation Bar, вам необходимо установить UITabBarController ' s title вместо viewWillAppear функция так, что это происходит каждый раз, когда вы переключаете вкладки:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.tabBarController?.navigationItem.title = "My Title"
    self.tabBarController?.navigationItem.leftBarButtonItem = settingsButton //This is the IBOutlet variable that you previously added
}

но лучший способ сделать это на самом деле было бы иметь его наоборот, как так

Correct view hierarchy

вы должны подключить UINavigationController для каждого ребенка UITabBarController, как правильнее семантически, так и проще поддерживать.


Ваш вопрос неясен, если код, который вы представили с UIViewController что хранится внутри UINavigationController и navigationBar отображается, вы можете просто использовать:

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "My Title"
}

на Ссылка На Класс UINavigationController Apple написал это:

init (rootViewController: UIViewController)
Параметры rootViewController
Контроллер вида, расположенный в нижней части стека навигации. Этот объект не может быть экземпляром класса UITabBarController.

но вы можете сделать это, если вы настаиваете.Но в этом случае ваши ViewControllers tabbarController все разделяли одно и то же название, которое является названием tabbarController.

лучший способ сделать это-дать каждому из ViewController tabbarController NavigationViewController.