Подтвердить что ты не робот

Навигационная панель, не показывающая iOS swift

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

navigationController?.setNavigationBarHidden(navigationController?.navigationBarHidden == false, animated: true);

Теперь я хочу добавить панель навигации в какой-то другой 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]
    }


}

Изменить 1:

Я использую следующий код для перехода с одного контроллера просмотра, а не на ссылку из раскадровки. Это проблема?

 let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let secondViewController = storyboard.instantiateViewControllerWithIdentifier("HomeVC")
        presentViewController(secondViewController, animated: false, completion: nil)

Изменить 2:

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

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

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

Изменить 3:

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

4b9b3361

Ответ 1

Контроллер навигации - это контроллер, в котором есть стек контроллеров. Поэтому, если у вас есть что-то вроде этого:

NAV → A → (segue) B

Даже если вы скроете навигационную панель, вы все равно сможете сделать segues. Также не можете ли вы просто отобразить навигационную панель во втором (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 заменил ваш контроллер навигации, поэтому вы не могли видеть панель навигации.

Ответ 2

сделайте, как в viewcontroller скрытый

для скрытия navigationController в viewWillAppear

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

для отображения navigationController в viewWillDisappear

override func viewWillDisappear(animated: Bool)
{
    super.viewWillDisappear(animated)
    self.navigationController?.navigationBarHidden = false
}

Ответ 3

в режиме viewDidLoad контроллера вида, в котором вы не хотите показывать навигационную панель, добавьте строку

navigationController.navigationBarHidden = true

вы сейчас скрываетесь во всех контроллерах представления

Изменить: вы представляете контроллер представления, а не

self.navigationController!.pushViewController(controller) 

Ответ 4

У меня такое же требование в моем стремительном проекте.

так я обработал панель навигации

Убедитесь, что ваш первый экран встроен в контроллер навигации

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

Например, у нас есть два экрана A и B

На экране A вам нужно скрыть панель навигации в viewWillAppear

override func viewWillAppear(animated: Bool)
    {
         super.viewWillAppear(animated)

        //hide navigation for screen A
        self.navigationController?.navigationBarHidden = true
    }

для включения навигации на экране B вам нужно добавить код ниже на экране A

override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!)
    {
        if (segue.identifier == "screen B segue identifier here")
        {
           //enable navigation for screen B       
            navigationController?.setNavigationBarHidden(navigationController?.navigationBarHidden == false, animated: true)
        }

    }

Используя вышеприведенный стиль, я могу включить или отключить панель навигации для конкретного экрана, когда захочу

Ответ 5

Если вам нужно, чтобы эта панель навигации была скрыта только в этом контроллере, лучший способ - показать ее в viewWillDisappear() и скрыть в viewWillAppear().

Ответ 6

Слишком поздно, чтобы ответить, и есть другие хорошие ответы, но я хотел бы поделиться тем, что сработало для меня.

let controller = self.storyboard?.instantiateViewControllerWithIdentifier("HomeVC")
    self.navigationController!.pushViewController(controller!, animated:true)

Ответ 7

делать в скрытом 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
}