it-swarm.com.ru

Скрыть панель навигации в специальном представлении - Swift 3

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

В этом FirstView я пока использую это, чтобы скрыть NavBar внутри ViewDidLoad:

self.navigationController?.isNavigationBarHidden = true

Из этого FirstView я могу получить доступ к другим представлениям. В этих других видах я показываю NavBar, используя:

self.navigationController?.isNavigationBarHidden = false

Моя проблема в том, что:

  • Когда я перемещаюсь из View с Visible NavBar, обратно в FirstView с Hidden NavBar, NavBar теперь видим .. В основном NavBar скрывает только самый первый раз, а затем показывает, если я использую кнопку "Назад".

Как я могу предотвратить это?

Спасибо!

6
Quentin Beau Kwint

Переместите этот код в viewWillAppear() вместо viewDidLoad().

viewDidLoad() вызывается только один раз для каждого экземпляра контроллера представления, тогда как viewWillAppear() вызывается всякий раз, когда контроллер представления должен быть представлен на экране.

Вы можете прочитать больше о жизненном цикле контроллера представления здесь .

7
Eggsalad

Напишите следующий код в вашем FirstViewController 's viewWillAppear метод.

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

И в вашем SecondViewController 's viewWillAppear метод напишите ниже код

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

Не пытайтесь скрыть и показать навигационную панель в viewWillAppear и viewWillDisappear последовательно в FirstViewController .

3
Balaji Galave

Вы можете использовать эту функцию, чтобы скрыть панель навигации с классной анимацией:

 func setupAnimationForNavigationBar(caseOfFunction: Bool) {
    if caseOfFunction == true {
        UIView.animate(withDuration: 0.5) {
            self.navigationController?.navigationBar.transform = CGAffineTransform(translationX: 0, y: -200)
        }
    } else {
        UIView.animate(withDuration: 0.5, animations: {
            self.navigationController?.navigationBar.transform = CGAffineTransform.identity
        })
    }

}

Если вы хотите скрыть NavigationBar, установите значение «True», а если вы хотите снова вызвать NavigationBar, установите значение «False»

1
Huu Phong Nguyen