2017-01-09 16 views
0

私は2つのView Controllerを持っています。 MainViewControllerとSecondViewController(これはナビゲーションコントローラに組み込まれています)。 MainViewControllerには、SecondViewControllerをモーダルに表示するUIButtonがありますが、SecondViewControllerにはUIButtonがあり、それを解除します。prefersStatusBarHiddenスライドアニメーションがデバイスで動作しない

それらのそれぞれの次のコードを持っている:

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を使用しています。

答えて

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) 

} 
関連する問題