取消控制器动画过渡时,错误的preferredStatusBarStyle不正确

时间:2018-12-06 08:22:46

标签: ios swift uiviewanimationtransition ios-statusbar

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

我使用UIViewControllerAnimatedTransitioning+UIPercentDrivenInteractiveTransitionUIScreenEdgePanGestureRecognizer控制器之间进行切换。

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

我尝试在每个setNeedsStatusBarAppearanceUpdate()中调用viewWillAppear,但是状态栏没有改变。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

        self.setNeedsStatusBarAppearanceUpdate()

    }, completion: nil)
}

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