我有一个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)
}
这样,当您取消转换时,您会看到第二个视图控制器的状态栏,然后状态栏将返回到第一个控制器。