2015-10-07 7 views
0

Я попытался создать класс в Swift, который автоматически скрывает мои UIStatusBar и мой navigationController через 1 секунду. Моя проблема в том, что StatusBar не исчезнет. Это то, что я получил:UIStatusBar не исчезнет

override func viewDidLoad() { 
    super.viewDidLoad() 
    NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "prefersStatusBarHidden", userInfo: nil, repeats: false) 
} 
override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
    } 

override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation { 
    return UIStatusBarAnimation.Fade 
} 

override func prefersStatusBarHidden() -> Bool { 
    if (barcounter == 0){ 
     hide() 
     barcounter = 1 
     return true 
    } 
    else { 
     show() 
     barcounter = 0 
     return false 
    } 
} 

@IBAction func picturePressed(sender: AnyObject) { 
    prefersStatusBarHidden() 
} 

func hide(){ 

    UIView.animateWithDuration(1, delay: 1, options: UIViewAnimationOptions.CurveEaseOut, animations: { 

     self.navigationController?.navigationBar.alpha = 0.0 

     }, completion: nil) 

} 

func show(){ 
    UIView.animateWithDuration(1, delay: 1, options: UIViewAnimationOptions.CurveEaseOut, animations: { 

     self.navigationController?.navigationBar.alpha = 1.0 

     }, completion: nil) 

} 

ответ

1

Вам необходимо переопределить этот метод в любом контроллере представления и хотите скрыть uistatusbar.

override func prefersStatusBarHidden() -> Bool { 
    return true; 
} 

, если его не работает, то попробуйте следующее: -

In Info.plist set View controller-based status bar appearance to NO 

And call UIApplication.sharedApplication().statusBarHidden = true 

надеюсь, что это поможет вам.

+0

поэтому верхний пример я уже пробовал, как вы можете увидеть в моем Пример. Теперь я удалил его и попробовал второй. Это работало для меня, но не правильно. На данный момент панель состояния скрыта, но навигационный контроллер больше не скрывается –

+0

nevermind - он работает: D спасибо –

+0

эй, если его работа затем, пожалуйста, одобрила ответ, чтобы помочь другим –

0

Хорошо. Я решил так: Создал новый класс HeaderAnimationHelper, в котором я создал полезные методы. Подобным образом я могу назвать это повсюду.

Так здесь вы можете увидеть класс Helper:

импорт UIKit

class HeaderAnimationHelper { 

    static let sharedInstance = HeaderAnimationHelper() 
    var navi: UINavigationController! 

    func hideController(var barcounter: Int, navigationController: UINavigationController) -> Int { 
     navi = navigationController 
     if (barcounter == 0){ 
      barcounter = 1 
      UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.Fade) 
      hide() 
     } 
     else { 
      show() 
      barcounter = 0 
      UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Fade) 
     } 
     return barcounter 
    } 

    func hide(){ 

     UIView.animateWithDuration(0.5, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { 

      self.navi.navigationBar.alpha = 0.0 

      }, completion: nil) 

    } 

    func show(){ 
     UIView.animateWithDuration(0.5, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { 

      self.navi.navigationBar.alpha = 1.0 

      }, completion: nil) 

    } 


} 

и следующий класс является основным классом, в котором вы можете поместить все, что вам код и прочее ... я создал это так:

import UIKit 

class ContactMeViewController: UIViewController { 


    var barcounter = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "animate", userInfo: nil, repeats: false) 
    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
    } 


    override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation { 
     return UIStatusBarAnimation.Fade 
    } 

    @IBAction func picturePressed(sender: AnyObject) { 
     animate() 
    } 

    func animate(){ 
     barcounter = HeaderAnimationHelper.sharedInstance.hideController(barcounter, navigationController: self.navigationController!) 
    } 

} 

редактировать 10/07/15:

Я Я забыл упомянуть, что очень важно, чтобы добавить зависимость к Info.plist

In Info.plist set View controller-based status bar appearance to NO 

упускают этот метод UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Fade) является depricated