it-roy-ru.com

Заголовок контроллера навигации не отображается?

Поэтому, когда у меня есть OptionsViewController в качестве rootViewController в 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()

... установка заголовка OptionViewController работает, если я делаю это в viewDidLoad():

    title = "Route Options"

 enter image description here

Но когда я помещаю OptionsViewController в стек навигации, заголовок не отображается. 

То есть если я начну с другого представления, как rootViewController в 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()

И в HomeViewController я толкаю свой OptionViewController так:

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

Название не отображается!

 enter image description here

Единственный способ, которым мне удалось показать заголовок, это сделать (в OptionViewController)

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

Но это проявляется как кнопка назад, а не посередине, а это не то, что я хочу.

 enter image description here

Если бы кто-нибудь мог сказать мне, как я мог бы установить заголовок так, чтобы он был в середине панели навигации, когда он помещался в стек навигационного контроллера, это было бы здорово!

Код

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

Вам нужно установить navigationItem.title на желаемое значение. Если вы хотите изображение, вы устанавливаете navigationItem.titleView

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

сначала вам нужно установить цвет UINavigationBar и цвет текста. попробуйте это в didFinishLaunchingWithOptions.

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

если вы хотите удалить строку после кнопки добавьте их тоже

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

И просто установите свой заголовок в viewDidLoad() или

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

    self.title = "Your Title"

}
2
Midhun K Mohan

Для других, приходящих сюда на основе заголовка, не забудьте установить свой класс ViewController в IB в соответствующий файл Swift.

После этого я смог установить заголовок без проблем, используя

self.navigationItem.title = "my title"

или же 

self.title = "my title"
1
Suragch

Попытайся:

В HomeViewController:

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

И в вашем OptionsViewController:

override func viewDidLoad() {
        super.viewDidLoad()

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

Просто добавьте строку ниже, чтобы установить заголовок для элемента навигации

self.title = "Title 1"
0
venkat