preferredStatusBarStyle

preferredStatusBarStyle

我有一个UITabViewController嵌入了一些UIViewControllers。这些控制器可以具有不同的preferredStatusBarStyle

我使用UIViewControllerAnimatedTransitioning+UIPercentDrivenInteractiveTransition在使用UIScreenEdgePanGestureRecognizer的控制器之间切换。

我注意到,如果我在两个具有不同preferredStatusBarStyle的控制器之间开始转换并取消转换,则状态栏样式不会返回到第一个控制器首选项,而是保留为第二个。显然,如果我完成了转换,或使用选项卡栏项在控制器之间切换,则状态栏样式将正确更改。

我尝试在每个setNeedsStatusBarAppearanceUpdate()中调用viewWillAppear,但是状态栏不会更改。

我知道我可以使用UIApplication.shared.statusBarStyle设置器更改状态栏样式,但是现在不赞成使用此方法。

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

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

最佳答案

我找到了解决此问题的方法(虽然不完美,但可以解决)

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

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

        self.setNeedsStatusBarAppearanceUpdate()

    }, completion: nil)
}


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

09-11 18:23