0

Я хочу, чтобы один из моих нажатых viewControllers в стеке контроллера навигации был «полным экраном» - нет панели навигации и нет строки состояния. У меня есть этот код, который скрывает и показывает навигационную панель в одном из контроллеров отображения навигационного контроллера (я хочу, чтобы это было толкнул на весь экран):Скрытие навигационных и статусных баров только для одного UIViewController внутри стека UINavigationController

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    self.navigationController?.setNavigationBarHidden(true, animated:animated) 
} 

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 
    self.navigationController?.setNavigationBarHidden(false, animated:animated) 
} 

В то же ViewController я также Скрытие Строка состояния с этим:

override var prefersStatusBarHidden: Bool { 
    return true 
} 

Он скрывается и показывается, как ожидался, но проблема в том, что я получаю черную полосу на переходе при нажатии этой точки зрения контроллера и назад от него (см изображения).

Нажмите на этот контроллер: Push to this controller

И снова от этого контроллера (обратно кнопка):

Back from this controller

Оказывается, это происходит из-за функции prefersStatusBarHidden Удаление это решает проблему.

Код для показа/скрытия панели навигации взята из: https://stackoverflow.com/a/2406167/4207465

и на основе библиотеки для разработчиков Apple: «Отображение и скрытие панели навигации - Когда панель навигации используется в сочетании с навигационный контроллер, вы всегда используете метод setNavigationBarHidden: анимированный: метод UINavigationController для отображения и скрытия навигационной панели ... »

Не знаете, почему это происходит, Спасибо за помощь!

+0

Оказывается, это происходит из-за prefersStatusBarHidden Удаление это решает проблему, исследуя почему .. –

ответ

0

Попробуйте скрыть навигационную панель в представленииDidAppear. Теперь перед вами показывается контроллер.

func viewDidAppear(_ animated: Bool) { 
    super. viewDidAppear(animated) 
    self.navigationController?.setNavigationBarHidden(true, animated: animated) 
} 
+0

Спасибо, но, это на самом деле делает анимацию еще более странной. –

1

@Boaz Френкель

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

ViewController A: Полноэкранный

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

override func viewDidAppear(animated: Bool) { 
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .Fade) 
    super.viewDidAppear(animated) 
} 

ViewController B: С Панель навигации и панели состояния

override func viewWillAppear(animated: Bool) { 

    self.navigationController?.setNavigationBarHidden(false, animated: animated) 
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: .None) 
    super.viewWillAppear(animated) 
} 
Смежные вопросы