状态栏在关闭模式视图后保持隐藏并在几秒钟后出现

Posted

技术标签:

【中文标题】状态栏在关闭模式视图后保持隐藏并在几秒钟后出现【英文标题】:Status bar keeps hidden after dismiss modal view and appears after some seconds 【发布时间】:2015-03-01 14:57:29 【问题描述】:

我有一个很奇怪的行为:

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

override func prefersStatusBarHidden() -> Bool 
    return true

当我使用关闭模态呈现的视图时

self.dismissViewControllerAnimated(true, completion: nil)

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

override func prefersStatusBarHidden() -> Bool 
    return false

但几秒钟后状态栏会自动出现!?

我在 *** 尝试了一个解决方案:

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

但这对我没有任何改变。

也许我可以在 viewDidAppear 的根视图中进行刷新??

【问题讨论】:

你看过setNeedsStatusBarAppearanceUpdate吗? 嘿兄弟,我有完全相同的问题,我尝试了所有功能来强制显示状态栏。你最后找到解决办法了吗? 很遗憾没有:( 【参考方案1】:

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

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

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

【讨论】:

Swift 3 中的 DispatchQueue.main.async【参考方案2】:

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

如果视图控制器的状态栏属性(例如隐藏/未隐藏状态或样式)发生更改,则调用此方法。如果您在动画块中调用此方法,则更改将与动画块的其余部分一起进行动画处理。

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

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

【讨论】:

以上是关于状态栏在关闭模式视图后保持隐藏并在几秒钟后出现的主要内容,如果未能解决你的问题,请参考以下文章

iOS:使状态栏在非 iphoneX 上隐藏时保持其高度

自动隐藏引导弹出框[关闭]

关闭视图后如何保持集合视图单元格的状态?

xamps 上的 MySQL 服务运行,然后在几秒钟后停止

关闭模态视图后的状态栏和导航栏问题

一旦程序完成并在 1 次击键后关闭,是不是有办法让控制台窗口保持打开状态?