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

#ios #swift #uinavigationbar #uibarbuttonitem

#iOS #swift #uinavigationbar #uibarbuttonitem

Вопрос:

Я установил rightBarButton navigationBar программно, но это не отображается, хотя заголовок отображается нормально.

Вот моя форма кода AppDelegate :

     UINavigationBar.appearance().barTintColor        = APP_COLOR
    UINavigationBar.appearance().tintColor           = UIColor.white
    UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.font:Constants.APP_REGULAR_FONT_WITH_SIZE(size: 18), NSAttributedString.Key.foregroundColor : UIColor.white]
 

И вот код из моего viewController , который я пытаюсь добавить rightBarButton .

 override func viewDidLoad()
{
    super.viewDidLoad()

    let rightBarButton = UIBarButtonItem(image: UIImage(named: "logout"), style: .plain, target: self, action: #selector(logoutButtonTapped))
    self.navigationController?.navigationItem.rightBarButtonItem = rightBarButton
}
 

Я также попытался удалить настройки внешнего вида, но кнопка все еще не видна.

введите описание изображения здесь

Комментарии:

1. Где вы устанавливаете заголовок (Naeem) этого экрана?

2. попробуйте распечатать self.NavigationController, посмотрите, нет ли его нуля

3. @Adeel в представлении появится, я получаю данные из базы данных, а затем устанавливаю имя в качестве заголовка навигации

4. @AgentChocks. нет, это не нулевой брат

5. @Adeel когда я захожу на этот контроллер из RootViewController, он не отображается, но когда я прихожу сюда с другого контроллера, а не с RootViewController, он показывает

Ответ №1:

      let rightBarButton = UIBarButtonItem(image: UIImage(named: "test"), style: .plain, target: self, action: #selector(logoutButtonTapped))

    self.navigationController?.navigationBar.topItem?.rightBarButtonItem = rightBarButton
 

теперь это работает для меня

Ответ №2:

Вы можете удалить self.navigationController?. в своем коде.

 override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(logoutButtonTapped))
}
 

Комментарии:

1. по-прежнему не отображается, когда я захожу на этот контроллер из корневого ViewController, тогда это не отображается, когда приходит с другого контроллера, тогда это показывает.

Ответ №3:

Не используйте self.NavigationController?.navi … вместо этого используйте self.navigationItem.rightBarButton…

 override func viewDidLoad()
{
    super.viewDidLoad()

    let rightBarButton = UIBarButtonItem(image: UIImage(named: "logout"), style: .plain, target: self, action: #selector(logoutButtonTapped))
    self.navigationItem.rightBarButtonItem = rightBarButton
}
 

Надеюсь, ваша проблема будет решена с помощью этого кода. Спасибо.

Комментарии:

1.по-прежнему не отображается, когда я захожу на этот контроллер из корневого ViewController, тогда это не отображается, когда приходит с другого контроллера, тогда это показывает.

2. как вы пришли к этому контроллеру? window?.rootViewController = UINavigationController(rootViewController: ViewController()) вы использовали этот код или нет? позвольте мне посмотреть ваш код вызова этого контроллера, чтобы я мог знать, как вы добираетесь до этого контроллера.

3. если вы не использовали это window?.rootViewController = UINavigationController(rootViewController: ViewController()) , вы не увидите панель навигации в своем представлении. И если вы пришли с определенного контроллера, вам следует использовать self.navigationController?.pushViewController(ViewController(), animated: true) . Если у вас нет этого кода, вы не получите панель навигации.

4. пусть chatHistoryVC = self.storyboard? .instantiateViewController(с идентификатором: «ChatHistoryVC») как! ChatHistoryVC self.NavigationController?.setViewControllers([chatHistoryVC], анимированный: true)

5. let storyBoard: UIStoryboard = UIStoryboard(name: "Storyboard", bundle: nil) let programSchedule = storyBoard.instantiateViewController(withIdentifier: "SessionFeedbackController") as! SessionFeedbackController self.navigationController?.pushViewController(programSchedule, animated: false) попробуйте этот код, я думаю, он должен работать для вас.