在 iPhone X 中状态栏没有动画
Status bar not animating in iPhone X
我正在使用 XCode 10 和 iOS 11 开发 iPhone 应用程序。
当从一个场景移动到另一个场景时,我正在尝试让状态栏在屏幕外显示动画。
在我的第一个视图控制器(表ViewController)中我声明:
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 上?
只要我没有在 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 上为我制作了很好的动画。
我正在使用 XCode 10 和 iOS 11 开发 iPhone 应用程序。
当从一个场景移动到另一个场景时,我正在尝试让状态栏在屏幕外显示动画。
在我的第一个视图控制器(表ViewController)中我声明:
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 上?
只要我没有在 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 上为我制作了很好的动画。