Как скрыть панель навигации от первого ViewController или конкретного ViewController в swift?
Я использовал следующий код в viewDidLoad()
:
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.isNavigationBarHidden = true
}
а также на viewWillAppear
:
override func viewWillAppear(animated: Bool) {
self.navigationController?.isNavigationBarHidden = true
}
Оба метода скрывают контроллер навигации от всех ViewControllers.
Если вы знаете, что у всех других представлений должна быть видимая панель, вы можете использовать viewWillDisappear
чтобы снова установить ее видимой.
В Свифте:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.setNavigationBarHidden(false, animated: animated)
}
Swift 3
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Hide the navigation bar on the this view controller
self.navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Show the navigation bar on other view controllers
self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
Вы можете отобразить navigationController
в viewWillDisappear
override func viewWillDisappear(animated: Bool)
{
super.viewWillDisappear(animated)
self.navigationController?.isNavigationBarHidden = false
}
Swift 3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
Вы также можете создать расширение для этого, чтобы вы могли повторно использовать расширение, не выполняя его снова и снова в каждом контроллере представления.
import UIKit
extension UIViewController {
func hideNavigationBar(){
// Hide the navigation bar on the this view controller
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
func showNavigationBar() {
// Show the navigation bar on other view controllers
self.navigationController?.setNavigationBarHidden(false, animated: true)
}
}
Итак, вы можете использовать методы расширения, как показано ниже
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
hideNavigationBar()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
showNavigationBar()
}
В Swift 3 вы можете использовать isNavigationBarHidden Property также для отображения или скрытия панели навигации
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Hide the navigation bar for current view controller
self.navigationController?.isNavigationBarHidden = true;
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Show the navigation bar on other view controllers
self.navigationController?.isNavigationBarHidden = false;
}
Способы отображения панели навигации в Swift:
self.navigationController?.setNavigationBarHidden(false, animated: true)
self.navigationController?.navigationBar.isHidden = false
self.navigationController?.isNavigationBarHidden = false
Способы скрыть панель навигации в Swift:
self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true
Я использую вариант выше и изолирую разделы моего приложения, которые будут встроены в разные NavControllers. Таким образом, мне не нужно сбрасывать видимость. Например, очень полезно в последовательности запуска.
В IOS 8 делай как
navigationController?.hidesBarsOnTap = true
но только когда он является частью UINavigationController
сделать это ложным, когда вы хотите его вернуть
Вы можете сделать это из оконного контроллера (Swift3)
class WindowController: NSWindowController {
override func windowDidLoad() {
super.windowDidLoad()
window?.titleVisibility = .hidden
}
}