动画状态栏以及segue中的自定义转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动画状态栏以及segue中的自定义转换相关的知识,希望对你有一定的参考价值。
我有两个ViewControllers
,使用第一个我提出的第二个自定义segue,自定义动画师和基于百分比的交互器。
我想在控制器转换的同时向上滑动状态栏。
在第二个ViewController
我有这个,以隐藏状态栏
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
override var prefersStatusBarHidden: Bool {
return true
}
我知道我应该在动画块中调用setNeedsStatusBarAppearanceUpdate()
以使其动画化,并使用UIViewControllerTransitionCoordinator
方法animateAlongsideTransition:以使其跟随转换,但我不知道我应该在哪里调用此方法。
我尝试了第二个控制器的viewWillAppear
方法,但它仍然在没有动画的情况下立即消失。
什么是正确的地方?
答案
您无法看到动画的原因是因为在您的第二个视图控制器中您总是将true
返回到prefersStatusBarHidden
,然后这样的视图控制器以该条件开始,因此没有任何“机会”来播放动画。
所以在第二个视图控制器中你可能会尝试这样做:
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
以上是关于动画状态栏以及segue中的自定义转换的主要内容,如果未能解决你的问题,请参考以下文章