iOS实现隐藏状态栏动画

iOS,动画

Posted by Karim on September 19, 2018

隐藏状态栏是一个相对比较常见的需求,为了让隐藏状态栏更加平滑过渡,我们会给他增加一个动画效果。像常见的渐变透明隐藏效果和上下滚动隐藏效果,系统已经提供好对应的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后已经废弃,尽量还是使用第一种方法。


请保持转载后文章内容的完整,以及文章出处。本人保留所有版权相关权利。

分享到: