我正在使用带有XCode 10和iOS 11的iPhone应用程序。
从一个场景移动到另一个场景时,我试图让状态栏在屏幕外动起来。
在我的第一个视图控制器(TableViewController)中,我声明:
var isStatusBarHidden = false
然后添加以下内容:
override var prefersStatusBarHidden: Bool {
return isStatusBarHidden
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
,然后在prepare方法中:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "resultSegue" {
...
isStatusBarHidden = true
UIView.animate(withDuration: 0.5, animations: {
self.setNeedsStatusBarAppearanceUpdate()
})
}
}
在第二个视图控制器(ViewController)中,我
var isStatusBarHidden = true
和
override var prefersStatusBarHidden: Bool {
return true
}
该动画在iPhone 8上运行良好。但是,在iPhone X上,即使状态栏确实出现并消失了,它也没有动画。
我该如何在iPhone X上播放动画?
答案 0 :(得分:0)
只要我没有在UINavigationController中嵌入第一个视图控制器,我的代码就可以很好地工作。
如果您的第一个视图控制器位于UINavigationController中: 创建一个子类,例如CustomNavigationController:
class CustomNavigationController: UINavigationController {
var isStatusBarHidden: Bool = false
override var prefersStatusBarHidden: Bool {
return isStatusBarHidden
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
}
然后在第一个视图控制器中的prepare segue方法中:
if let navigationController = navigationController as? CustomNavigationController {
navigationController.isStatusBarHidden = true
UIView.animate(withDuration: 0.5, animations: {
self.setNeedsStatusBarAppearanceUpdate()
})
}
就像在第二个视图控制器中一样:
override var prefersStatusBarHidden: Bool {
return true
}
然后在iPhone X上对我来说动画效果很好。