我有一个UITabViewController
,其中嵌入了一些UIViewControllers
。这些控制器可以具有不同的preferredStatusBarStyle
。
我使用UIViewControllerAnimatedTransitioning+UIPercentDrivenInteractiveTransition
在UIScreenEdgePanGestureRecognizer
控制器之间进行切换。
我注意到,如果我在两个具有不同preferredStatusBarStyle
的控制器之间开始转换,并且取消了转换,则状态栏样式不会返回到第一个控制器首选项,而是保留为第二个。显然,如果我完成了转换,或者使用选项卡栏项在控制器之间切换,状态栏样式将正确更改。
我尝试在每个setNeedsStatusBarAppearanceUpdate()
中调用viewWillAppear
,但是状态栏没有改变。
我知道我可以使用UIApplication.shared.statusBarStyle
设置器来更改状态栏样式,但现在不赞成使用此方法。
我也尝试更改过渡的动画,但是问题并没有消失。
奇怪的是,取消过渡时,“ from”视图控制器的preferredStatusBarStyle
设置为正确的值,但显示为相反!
答案 0 :(得分:0)
我找到了解决此问题的方法(虽然不完美,但可以解决)
在第一个控制器的viewWillAppear
(“来自”控制器)中,调用此动画。
DispatchQueue.main.async {
UIView.animate(withDuration: duration, delay: delay, options: options, animations: {
self.setNeedsStatusBarAppearanceUpdate()
}, completion: nil)
}
通过这种方式,当您取消转换时,您会看到第二个视图控制器的状态栏,然后状态栏将返回到第一个控制器。