Панель навигации не показывает iOS swift
у меня есть несколько контроллеров вида в моем приложении. Я хочу спрятаться!--3--> в моем первом контроллере просмотра. Поэтому я использую следующий код, чтобы скрыть панель навигации
navigationController?.setNavigationBarHidden(navigationController?.navigationBarHidden == false, animated: true);
теперь я хочу добавить панель навигации в другой viewController, но моя панель навигации не отображается в этом viewcontroller. Почему это происходит?
моя раскадровка показывает панель навигации, но как только я пытаюсь запустить мое приложение, оно исчезло.
если я скрываю панель навигации с одного контроллера вида мы не можем использовать навигационный контроллер, не так ли? Надеюсь, я ошибаюсь. Тогда по каким причинам панель навигации не отображается?
EDIT:
также я хочу, чтобы мой контроллер вида только в портретном режиме. Итак, я сделал следующее: это вызывает проблему?
extension UINavigationController{
public override func shouldAutorotate() -> Bool {
if (UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeLeft ||
UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeRight ||
UIDevice.currentDevice().orientation == UIDeviceOrientation.Unknown) {
return false
}
else {
return true
}
}
public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return [UIInterfaceOrientationMask.Portrait ,UIInterfaceOrientationMask.PortraitUpsideDown]
}
}
Edit 1:
Я использую следующий код для перемещения с одного контроллера вида, а не ссылку с раскадровки. Это проблема сейчас?
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewControllerWithIdentifier("HomeVC")
presentViewController(secondViewController, animated: false, completion: nil)
Edit 2:
пожалуйста, проверьте мои следующие скриншоты. Что мои настройки для контроллера secondview
Edit 3:
7 ответов
навигационный Контроллер-это контроллер, который имеет стек вид контроллеров. Так что если у вас есть что-то вроде этого:
NAV - > A- > (segue) B
даже если вы скроете панель навигации, вы все равно сможете сделать сегменты. Также вы не можете просто отобразить панель навигации во втором (B) контроллере просмотра в viewWillAppear? И сначала так же спрячьте его на viewWillAppear.
edit: окончательное решение проблемы: Использовать:
let controller = storyboard.instantiateViewControllerWithIdentifier("HomeVC")
self.navigationController!.pushViewController(controller)
вместо из:
let secondViewController = storyboard.instantiateViewControllerWithIdentifier("HomeVC")
presentViewController(secondViewController, animated: false, completion: nil)
потому что pushViewController добавит secondViewController в свой стек. presentViewController заменял навигационный контроллер, поэтому вы не могли видеть панель навигации.
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)
}
в методе viewDidLoad контроллера вида, в котором вы не хотите показывать панель навигации, добавьте строку
navigationController.navigationBarHidden = true
в настоящее время вы скрываетесь во всех контроллерах просмотра
Edit: вы представляете контроллер вида, вместо этого он должен быть
self.navigationController!.pushViewController(controller)
у меня такое же требование в моем проекте swift.
вот как я обработал панель навигации
убедитесь, что ваш первый экран встроен в навигационный контроллер
пример у нас есть два экрана A и B
на экране A вам нужно скрыть панель навигации в viewWillAppear
override func viewWillAppear(animated: Bool)
{
super.viewWillAppear(animated)
//hide navigation for screen A
self.navigationController?.navigationBarHidden = true
}
для включения навигации на экране B вам нужно добавить ниже код в экране
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!)
{
if (segue.identifier == "screen B's segue identifier here")
{
//enable navigation for screen B
navigationController?.setNavigationBarHidden(navigationController?.navigationBarHidden == false, animated: true)
}
}
используя стиль выше, я могу включить или отключить панель навигации для определенного экрана, когда захочу
Если вам нужно, чтобы эта панель навигации была скрыта только в этом контроллере, лучший способ-показать ее в viewWillDisappear()
и спрятать в viewWillAppear()
.
слишком поздно отвечать, и есть другие хорошие ответы, но я хотел бы поделиться тем, что сработало для меня.
let controller = self.storyboard?.instantiateViewControllerWithIdentifier("HomeVC")
self.navigationController!.pushViewController(controller!, animated:true)
люблю в viewcontroller
на основе скрытого использования Swift 4.0
скрыть navigationController
на viewWillAppear
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.isNavigationBarHidden = true
}
показать navigationController
на viewWillDisappear
override func viewWillDisappear(animated: Bool)
{
super.viewWillDisappear(animated)
self.navigationController?.isNavigationBarHidden = false
}