隐藏状态栏是一个相对比较常见的需求,为了让隐藏状态栏更加平滑过渡,我们会给他增加一个动画效果。像常见的渐变透明隐藏效果和上下滚动隐藏效果,系统已经提供好对应的api给我们使用了。在需要隐藏状态栏的Controller下使用这段代码就可以实现了:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
isStatusBarHidden = !isStatusBarHidden
UIView.animate(withDuration: 0.3) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return isStatusBarHidden
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
如果是present
过去ViewController还在present
之前需要设置:
vc.modalPresentationCapturesStatusBarAppearance = true
要注意的一点是,使用这个方法需要在info.plist
中将View controller-based status bar appearance
字段设置成YES
。(PS:没有设置的默认为YES
如果项目中View controller-based status bar appearance
字段已经设置成了为NO
,上面的方法是不会生效的,这时候可以使用:
UIApplication.shared.setStatusBarHidden(true, with: .slide)
这样就能完美解决隐藏导航栏动画的问题了,但是要注意这个方法在iOS 9后已经废弃,尽量还是使用第一种方法。
请保持转载后文章内容的完整,以及文章出处。本人保留所有版权相关权利。