在 segue 中与自定义过渡一起设置动画状态栏
Animate status bar alongside custom transition in segue
我有两个 ViewControllers
,使用第一个的自定义 segue 我展示第二个,使用自定义动画师和基于百分比的交互器。
我想在控制器转换的同时向上滑动状态栏。
第二个ViewController
我有这个是为了隐藏状态栏
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
override var prefersStatusBarHidden: Bool {
return true
}
我知道我应该在动画块中调用 setNeedsStatusBarAppearanceUpdate()
以使其具有动画效果,并使用 UIViewControllerTransitionCoordinator
方法 animateAlongsideTransition: 以使其跟随过渡,但我不知道我应该在哪里调用这个方法。
我尝试了第二个控制器的viewWillAppear
方法,但它仍然立即消失,没有动画。
调用它的正确位置是什么?
你看不到动画的原因是因为在你的第二个视图控制器中你总是return true
到prefersStatusBarHidden
,然后这样的视图控制器以那个条件开始,因此没有任何 "chance" 来播放动画。
所以在第二个视图控制器中你可以尝试这样做:
class ViewController2: UIViewController {
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { get { return .slide } }
override var prefersStatusBarHidden: Bool { return statusBarHidden }
var statusBarHidden = false
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.statusBarHidden = true
UIView.animate(withDuration: 0.35) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
}
另外在你的 Info.plist
中一定要有 View controller-based status bar appearance
= YES
我有两个 ViewControllers
,使用第一个的自定义 segue 我展示第二个,使用自定义动画师和基于百分比的交互器。
我想在控制器转换的同时向上滑动状态栏。
第二个ViewController
我有这个是为了隐藏状态栏
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
override var prefersStatusBarHidden: Bool {
return true
}
我知道我应该在动画块中调用 setNeedsStatusBarAppearanceUpdate()
以使其具有动画效果,并使用 UIViewControllerTransitionCoordinator
方法 animateAlongsideTransition: 以使其跟随过渡,但我不知道我应该在哪里调用这个方法。
我尝试了第二个控制器的viewWillAppear
方法,但它仍然立即消失,没有动画。
调用它的正确位置是什么?
你看不到动画的原因是因为在你的第二个视图控制器中你总是return true
到prefersStatusBarHidden
,然后这样的视图控制器以那个条件开始,因此没有任何 "chance" 来播放动画。
所以在第二个视图控制器中你可以尝试这样做:
class ViewController2: UIViewController {
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { get { return .slide } }
override var prefersStatusBarHidden: Bool { return statusBarHidden }
var statusBarHidden = false
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.statusBarHidden = true
UIView.animate(withDuration: 0.35) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
}
另外在你的 Info.plist
中一定要有 View controller-based status bar appearance
= YES