在iOS 9中不推荐使用setStatusBarHidden(_:withAnimation :)

jac*_*zki 41 statusbar ios swift ios9

我看到在iOS 9 setStatusBarHidden(_:withAnimation:)中现在已被弃用,文档说要使用,[UIViewController prefersStatusBarHidden]但是如果我还想用幻灯片动画隐藏状态栏,那么iOS 9中的替代方案是什么?

Leo*_*Leo 99

参考preferredStatusBarUpdateAnimation,

GIF

在此输入图像描述

class ViewController: UIViewController {
    var isHidden:Bool = false{
        didSet{
            UIView.animate(withDuration: 0.5) { () -> Void in
                self.setNeedsStatusBarAppearanceUpdate()
            }  
         }
    }
    @IBAction func clicked(sender: AnyObject) {
        isHidden = !isHidden
    }
    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation{
        return .slide
    }
    override var prefersStatusBarHidden: Bool{
        return isHidden
    }
 }
Run Code Online (Sandbox Code Playgroud)


Tim*_*own 14

斯威夫特3

  • 计算变量已取代某些功能
  • animate函数具有更新的语法

class ViewController: UIViewController {

    var isHidden:Bool = false
    @IBAction func clicked(sender: AnyObject) {
        isHidden = !isHidden
        UIView.animate(withDuration: 0.5) { () -> Void in
            self.setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }
    override var prefersStatusBarHidden: Bool {
        return isHidden
    }
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*tau 12

通过将更新移动到(Swift 3语法),我已经清理了Leo的一些惊人的答案.didSet

class ViewController: UIViewController {

    @IBAction func clicked(sender: AnyObject) {
        statusBarHidden = !statusBarHidden
    }

    var statusBarHidden = false {
        didSet {
            UIView.animate(withDuration: 0.5) { () -> Void in
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }

    override var prefersStatusBarHidden: Bool {
        return statusBarHidden
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return .slide
    }
}
Run Code Online (Sandbox Code Playgroud)