prefersStatusBarHidden幻灯片动画无法在设备

时间:2017-01-09 19:47:44

标签: ios swift animation simulator

我有两个视图控制器。 MainViewController和SecondViewController(这个嵌入在导航控制器中)。 MainViewController有一个UIButton,它将模态地呈现SecondViewController,而SecondViewController有一个UIButton,它将自行解散。

他们每个人都有以下代码:

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
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    statusBarHidden = true
}

状态栏的幻灯片动画在模拟器中效果很好但在实际设备上没有,我做错了什么?

我正在使用xCode 8.2.1和Swift 3

1 个答案:

答案 0 :(得分:0)

我最终做的是这个。我创建了一个链接到状态栏视图的变量,并添加了函数,以便我可以做我需要的。

extension UIApplication {
    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

    func changeStatusBar(alpha: CGFloat) {
        statusBarView?.alpha = alpha
    }

    func hideStatusBar() {
        UIView.animate(withDuration: 0.3) {
            self.statusBarView?.alpha = 0
        }
    }

    func showStatusBar() {
        UIView.animate(withDuration: 0.3) {
            self.statusBarView?.alpha = 1
        }
    }
}

典型的用途是:

func scrollViewDidScroll(_ scrollView: UIScrollView) {

    let alpha = tableView.contentOffset.y / 100
    UIApplication.shared.changeStatusBar(alpha: alpha)

}