iOS: скрыть панель навигации только для одного viewcontroller, который является корнем UINavigationController? - PullRequest
1 голос
/ 11 октября 2019

Я хочу скрыть панель навигации только для одного viewcontroller, который является корневым viewcontroller UINavigationController.

В настоящее время я использую код ниже, чтобы скрыть панель навигации для определенного viewcontroller.

  • Чтобы скрыть панель навигации,
    override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.isNavigationBarHidden = true
        super.viewWillAppear(animated)
    }
  • Чтобы показать панель навигации для других контроллеров вида,
    override func viewWillDisappear(_ animated: Bool) {
        self.navigationController?.isNavigationBarHidden = false
        super.viewWillDisappear(animated)
    }

Когда я пытаюсь использовать этокод, приложение аварийно завершает работу на устройствах iOS 13 из-за нарушения потоков: ожидается основной поток.

Пожалуйста, проверьте проблему, возникающую при использовании приведенного выше кода для скрытия панели навигации,

iOS 13: нарушение потоков: ожидается основной поток

Пожалуйста, дайте мне знать, если есть какой-либо другой способ скрыть панель навигации только для одного viewcontroller.

Ответы [ 3 ]

2 голосов
/ 11 октября 2019
import UIKit
 class ViewController: UIViewController {

 override func viewWillAppear(_ animated: Bool){
    super.viewWillAppear(animated)
    self.navigationController?.isNavigationBarHidden = true
   }
 override func viewWillDisappear(_ animated: Bool){
    super.viewWillDisappear(animated)
    self.navigationController?.isNavigationBarHidden = false
   }

}

1 голос
/ 12 октября 2019

У меня есть другой способ скрыть / показать панель навигации от одного из моих друзей.

  • Установить делегата для NavigationController:
navigationController.delegate = self
  • Скрыть / Показать панель навигации для каждого ViewController все в одном месте
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let hide = (viewController is YourVC)
    navigationController.setNavigationBarHidden(hide, animated: animated)
}
1 голос
/ 11 октября 2019

Вы можете сделать его прозрачным (полностью невидимым), когда вызывается viewWillApper, и возвращаться к нормальному состоянию, когда вызывается view willDisappear. Вот вспомогательные функции.


func makeNaBarTransparent() {
      navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
      navigationController?.navigationBar.shadowImage = UIImage()
      navigationController?.navigationBar.isTranslucent = true
  }


 func restoreNavigationBarToDefault() {
      navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
      navigationController?.navigationBar.shadowImage = nil
  }

ИСПОЛЬЗОВАНИЕ

 import UIKit
class ViewController: UIViewController {

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

 override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        restoreNavigationBarToDefault()
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...