0

我有一个UITabViewController嵌入了一些UIViewControllers. 这些控制器可能有不同的preferredStatusBarStyle.

我使用 aUIViewControllerAnimatedTransitioning+UIPercentDrivenInteractiveTransition在使用 a 的控制器之间切换UIScreenEdgePanGestureRecognizer

我注意到,如果我在两个不同preferredStatusBarStyle的控制器之间开始转换并取消转换,状态栏样式不会返回到第一个控制器首选项,但仍会保留到第二个控制器首选项。显然,如果我使用标签栏项目完成转换或在控制器之间切换,状态栏样式会正确更改。

我尝试调用setNeedsStatusBarAppearanceUpdate()every viewWillAppear,但状态栏没有改变。

我知道我可以使用 setter 更改状态栏样式UIApplication.shared.statusBarStyle,但现在已弃用此方法。

我还尝试更改过渡动画,但问题并没有消失。

奇怪的是,preferredStatusBarStyle“from”视图控制器的 ,当取消转换时,设置为正确的值,但显示为相反!

4

1 回答 1

0

我找到了解决这个问题的方法(它并不完美,但可以解决)

viewWillAppear第一个控制器(“来自”一个)中,调用此动画。

DispatchQueue.main.async {
    UIView.animate(withDuration: duration, delay: delay, options: options, animations: {

        self.setNeedsStatusBarAppearanceUpdate()

    }, completion: nil)
}

这样,当您取消转换时,您会看到第二个视图控制器的状态栏,然后状态栏将返回到第一个控制器的状态栏。

于 2018-12-06T10:19:34.867 回答