web-dev-qa-db-fra.com

Le titre du contrôleur de navigation ne s'affiche pas?

Donc, quand j'ai OptionsViewController comme rootViewController dans le AppDelegate didFinishLaunchingWithOptions...

let rootVC = OptionsViewController()
        let navigationController = UINavigationController(rootViewController: rootVC)
        navigationController.navigationBar.barTintColor = .white
        navigationController.navigationBar.isTranslucent = false
        navigationController.navigationBar.tintColor = .black
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window!.rootViewController = navigationController
        self.window?.makeKeyAndVisible()

... définir le titre de la OptionViewController fonctionne si je fais ceci dans viewDidLoad():

    title = "Route Options"

 enter image description here

Mais lorsque j'appuie sur OptionsViewController dans la pile de navigation, le titre ne s'affiche pas. 

C'est à dire. si je commence avec une vue différente en tant que rootViewController dans AppDelegate:

 let rootVC = HomeViewController()
    let navigationController = UINavigationController(rootViewController: rootVC)
    navigationController.navigationBar.barTintColor = .white
    navigationController.navigationBar.isTranslucent = false
    navigationController.navigationBar.tintColor = .black
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window!.rootViewController = navigationController
    self.window?.makeKeyAndVisible()

Et dans HomeViewController je pousse ma OptionViewController comme ceci:

    let optionsVC = OptionsViewController()
    navigationController?.pushViewController(optionsVC, animated: true)

Le titre ne s'affiche pas!

 enter image description here

La seule façon dont j'ai réussi à faire apparaître le titre est de le faire (dans OptionViewController)

navigationController?.navigationBar.topItem?.title = "Route Options"

Mais il apparaît comme le bouton de retour plutôt qu'au milieu, ce qui n’est pas ce que je veux.

 enter image description here

Si quelqu'un pouvait me dire comment définir le titre de sorte qu'il se trouve au milieu de la barre de navigation lorsqu'il est placé sur la pile de navigationController, ce serait génial!

Code

AppDelegate.Swift

class AppDelegate: UIResponder, UIApplicationDelegate {
     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        let rootVC = HomeViewController()
        let navigationController = UINavigationController(rootViewController: rootVC)
        let barAppearance = UINavigationBar.appearance()
        barAppearance.barTintColor = UIColor.blue
        barAppearance.tintColor = UIColor.white
        barAppearance.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window!.rootViewController = navigationController
        self.window?.makeKeyAndVisible()

        return true
    }

HomeViewController.Swift

class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, DestinationDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            let optionsVC = OptionsViewController()
            self.definesPresentationContext = false //else going to try and present optionVC on homeVC when in optionVC
            navigationController?.pushViewController(optionsVC, animated: true)
        }
        tableView.deselectRow(at: indexPath, animated: true)
    }
}

OptionsViewController.Swift

class OptionsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource,
    DestinationDelegate, SearchBarCancelDelegate,UISearchBarDelegate,
    CLLocationManagerDelegate {
    override func viewDidLoad() {
        self.title = "Route Options"
    }
8
14wml

Vous devez définir le fichier navigationItem.title sur la valeur souhaitée. Si vous voulez une image que vous définissez navigationItem.titleView

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Your title here"
 } 
3
JustinM

vous devez d’abord définir la couleur UINavigationBar et la couleur du texte. essayez ceci dans didFinishLaunchingWithOptions.

let barAppearance = UINavigationBar.appearance()
    barAppearance.barTintColor = UIColor.blue
    barAppearance.tintColor = UIColor.white
    barAppearance.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

si vous voulez supprimer la chaîne après le backbutton .__, ajoutez-les aussi

let barItemAppearace = UIBarButtonItem.appearance()
    barItemAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)

Et définissez simplement votre titre dans viewDidLoad() ou

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

    self.title = "Your Title"

}
2
Midhun K Mohan

Pour les autres utilisateurs basés sur le titre, n'oubliez pas de définir votre classe ViewController dans IB sur le fichier Swift approprié.

Après cela, j'ai pu définir le titre sans problème en utilisant

self.navigationItem.title = "my title"

ou 

self.title = "my title"
1
Suragch

Essayez le:

Dans HomeViewController:

let optionsVC = OptionsViewController()
navigationController?.viewControllers = [optionsVC]

Et dans votre OptionsViewController:

override func viewDidLoad() {
        super.viewDidLoad()

        navigationController?.navigationBar.isTranslucent = false
        navigationItem.title = "Your Title"
    }
1
javimuu

Il suffit d'ajouter la ligne ci-dessous pour définir le titre de l'élément de navigation.

self.title = "Title 1"
0
venkat