Строка состояния остается скрытой после отклонения модального вида и появляется через несколько секунд

У меня очень странное поведение:

У меня есть приложение с контроллером навигации (панель навигации), где отображается строка состояния. Затем я представляю контроллер вида (сканер штрих-кода с использованием камеры), где я хочу скрыть строку состояния, поэтому я реализовал:

override func prefersStatusBarHidden() -> Bool {
    return true
}

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

self.dismissViewControllerAnimated(true, completion: nil)

представление исчезает, а строка состояния остается скрытой, хотя rootviewcontroller реализует

override func prefersStatusBarHidden() -> Bool {
    return false
}

Но через несколько секунд строка состояния появляется автоматически!?

Я решение здесь, в Stackru, которое я попробовал:

UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Fade)
self.dismissViewControllerAnimated(true, completion: nil)

Но это ничего не изменило для меня.

Может быть, я могу сделать обновление в rootview в viewDidAppear??

2 ответа

Вы возможно звоните dismissViewControllerAnimated из фоновой темы?

Если это так, попробуйте обернуть вызов (и любые другие вызовы UIKit, поскольку он не является потокобезопасным) в обратном вызове GCD в основную очередь следующим образом:

dispatch_async(dispatch_get_main_queue()) {
 self.dismissViewControllerAnimated(true, completion: nil)
}

Вам, вероятно, нужно позвонить setNeedsStatusBarAppearanceUpdate на вашем контроллере представления:

Вызывайте этот метод, если изменяются атрибуты строки состояния контроллера представления, такие как скрытый / скрытый статус или стиль. Если вы вызываете этот метод в блоке анимации, изменения анимируются вместе с остальной частью блока анимации.

Как правило, это делается в viewDidLoad, но в вашем случае, вероятно, лучше сделать это в viewDidAppear так как ваше представление уже загружено и вы отклоняете представление дальше вниз по иерархии представлений. Попробуй это:

override func viewDidAppear(animated: Bool) {
    self.setNeedsStatusBarAppearanceUpdate()
}
Другие вопросы по тегам