我正在开发带有XCode 10和iOS 11的iPhone应用程序。
我正在尝试让状态栏在从一个场景移动到另一个场景时在屏幕外动画化。
在我的第一个视图控制器(TableViewController(中,我声明:
var isStatusBarHidden = false
然后,我添加以下内容:
override var prefersStatusBarHidden: Bool {
return isStatusBarHidden
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
然后在准备方法中:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "resultSegue" {
...
isStatusBarHidden = true
UIView.animate(withDuration: 0.5, animations: {
self.setNeedsStatusBarAppearanceUpdate()
})
}
}
在第二个视图控制器(视图控制器(中,我有
var isStatusBarHidden = true
和
override var prefersStatusBarHidden: Bool {
return true
}
动画在iPhone 8上运行良好。但是,在iPhone X上,即使状态栏确实出现和消失,它也不会动画。
我怎样才能让动画也发生在iPhone X上?
只要我没有在UINavigationController中嵌入第一个视图控制器,我就可以很好地工作
。如果您在 UINavigationController 中拥有第一个视图控制器: 创建一个子类,f.ex CustomNavigationController:
class CustomNavigationController: UINavigationController {
var isStatusBarHidden: Bool = false
override var prefersStatusBarHidden: Bool {
return isStatusBarHidden
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
}
然后在第一个视图控制器的 prepare for 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上为我提供了很好的动画效果。