iOS 9 以降でステータスバーを非表示にする方法

iOS 9 以降、以下のステータスバーを非表示にする方法がdeprecated(非推奨)になりました。

UIApplication.shared.setStatusBarHidden(true, with: .slide)

地味に使っていたのでおうふっ_| ̄|○って感じでしたが、以下の方法で解決できました。prefersStatusBarHiddenをオーバーライドしてtrueを返してやり、ステータスバーを非表示にしたいタイミングでself.setNeedsStatusBarAppearanceUpdate()をコールします。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.setNeedsStatusBarAppearanceUpdate()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override var prefersStatusBarHidden: Bool {
        return true
    }   
}

軽くめんどくさくなりましたが、まぁ解決できたのでええでしょ。なお、ボタンを押してステータスバーを表示・非表示を切り替える場合、以下のようなコードになります。preferredStatusBarUpdateAnimationをオーバーライドしてUIStatusBarAnimation.slideとすることで、非常時時の挙動をスライドアニメーションとしています。

import UIKit

class ViewController: UIViewController {

    var statusBarHiddenFlag: Bool = false

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func btAction(_ sender: Any) {
        self.statusBarHiddenFlag = !self.statusBarHiddenFlag
        self.setNeedsStatusBarAppearanceUpdate()
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

    override var prefersStatusBarHidden: Bool {
        return self.statusBarHiddenFlag
    }
}

写真などを全画面表示する時、ステータスバーを消すことが多いので、意外と使いそうですね。

GitHubはこちら

参考

下記サイトに助けられました!

【Swift】iOS ステータスバーの表示・非表示を動的に切り替える

コメントを残す

メールアドレスが公開されることはありません。