状态栏在关闭模态视图后保持隐藏状态,并在几秒钟后显示

时间:2015-01-03 15:23:55

标签: ios swift xcode6 statusbar

我有一种非常奇怪的行为:

我有一个带导航控制器(导航栏)的应用程序,状态栏可见。 然后我以模态方式呈现一个视图控制器(使用相机的条形码扫描仪),我想要隐藏状态栏,所以我实现了:

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

当我使用

关闭模态显示的视图时
self.dismissViewControllerAnimated(true, completion: nil)

视图消失,状态栏保持隐藏状态,尽管rootviewcontroller实现了

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

但几秒钟后状态栏会自动显示!

我在StackOverflow处找到了一个解决方案:

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

但这对我没有任何改变。

也许我可以在viewDidAppear ??

的rootview中刷新

2 个答案:

答案 0 :(得分:8)

您是否可能从后台线程中调用dismissViewControllerAnimated

如果是这样,请尝试将GCD回调中的调用(以及对UIKit的任何其他调用,因为它不是线程安全的)包装回来,如下所示:

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

答案 1 :(得分:2)

您可能需要在视图控制器上调用setNeedsStatusBarAppearanceUpdate

  

如果视图控制器的状态栏属性(如隐藏/取消隐藏状态或样式)发生更改,请调用此方法。如果在动画块中调用此方法,则会将更改与动画块的其余部分一起设置动画。

通常情况下,这是在viewDidLoad中完成的,但在您的情况下,可能最好在viewDidAppear中执行此操作,因为您的视图已经加载,并且您正在忽略视图查看层次结构试试这个:

override func viewDidAppear(animated: Bool) {
    self.setNeedsStatusBarAppearanceUpdate()
}