iOS 停止状态栏在动画期间消失
iOS stop status bar from disappearing during animation
我正在从带状态栏的 ViewController 切换到不带状态栏的状态。
在动画播放过程中,我看到状态栏在旧 ViewController 上快速向上滑动,而新 ViewController 在顶部滑动。
对于为什么会发生这种情况以及如何解决这个问题有什么建议吗?
新的 ViewController 没有状态栏,原因是:
override var prefersStatusBarHidden: Bool {
return true
}
演示文稿样式为
modalPresentationStyle="overCurrentContext"
新:
创建了一个带有问题的测试 XCode 项目:
https://github.com/paul301/TestSlideUp
要使新的 ViewController 停留在旧状态栏的顶部,您需要创建一个新的 UIWindow 并手动制作动画。
示例代码:
var window = UIWindow()
//to show new view controller
func showWindow() {
let vc = NewViewController()
self.window.rootViewController = vc
self.window.backgroundColor = UIColor.clear
self.window.windowLevel = UIWindowLevelStatusBar
self.window.frame = CGRect(x: 0, y: UIScreen.main.bounds.height, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
self.window.isHidden = false
UIView.animate(withDuration: 0.5) {
self.window.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
}
}
我正在从带状态栏的 ViewController 切换到不带状态栏的状态。
在动画播放过程中,我看到状态栏在旧 ViewController 上快速向上滑动,而新 ViewController 在顶部滑动。
对于为什么会发生这种情况以及如何解决这个问题有什么建议吗?
新的 ViewController 没有状态栏,原因是:
override var prefersStatusBarHidden: Bool {
return true
}
演示文稿样式为
modalPresentationStyle="overCurrentContext"
新:
创建了一个带有问题的测试 XCode 项目: https://github.com/paul301/TestSlideUp
要使新的 ViewController 停留在旧状态栏的顶部,您需要创建一个新的 UIWindow 并手动制作动画。
示例代码:
var window = UIWindow()
//to show new view controller
func showWindow() {
let vc = NewViewController()
self.window.rootViewController = vc
self.window.backgroundColor = UIColor.clear
self.window.windowLevel = UIWindowLevelStatusBar
self.window.frame = CGRect(x: 0, y: UIScreen.main.bounds.height, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
self.window.isHidden = false
UIView.animate(withDuration: 0.5) {
self.window.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
}
}