2017-01-09 7 views
0

У меня есть два контроллера вида. MainViewController и SecondViewController (этот встроен в контроллер навигации). MainViewController имеет UIButton, который будет иметь статус SecondViewController, тогда как 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) 

} 
Смежные вопросы