【问题标题】:UIStatusBar won't disappearUIStatusBar 不会消失
【发布时间】:2015-10-07 09:46:04
【问题描述】:

我尝试在 Swift 中创建一个类,它会在 1 秒后自动隐藏我的 UIStatusBarnavigationController。 我的问题是,StatusBar 不会消失。这是我得到的:

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)

}

【问题讨论】:

    标签: swift uinavigationcontroller swift2 uistatusbar


    【解决方案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
    

    希望对你有所帮助。

    【讨论】:

    • 所以上面的例子我已经试过了,你可以在我的例子中看到。现在我删除了它并尝试了第二个。这个对我有用,但不正确。目前状态栏已隐藏,但导航控制器不再隐藏
    • 嘿,如果它有效,那么请批准答案,以便对其他人有帮助
    • 谢谢。请更正答案,将其设为绿色,以便其他人轻松找到。
    【解决方案2】:

    好吧..我这样解决了: 我创建了一个新类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) 被贬低了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多