【swift】iOS13でステータスバーの高さを取得したい!!

Swift

こんちには、フリーのITエンジニアでWeb(PHP:Laravel)のバッグエンドをメインにフルリモートでお仕事させて頂きながら、個人開発でiOSアプリを作っているMoritaです。

最近iOSアプリを作っております。
swiftのいいところはgoogleさんで検索した結果でも、すでに情報が古いものがトップページに表示されてしまうところですね。

そんなこんなでステータスバーの高さが知りたくて調べました。

iOS13では非推奨になった!

UIApplication.shared.statusBarFrame.height

こいつは警告が出てしまいますね。
“‘statusBarFrame’ was deprecated in iOS 13.0: Use the statusBarManager property of the window scene instead.”

どうすればいいんだ!

window.windowScene?.statusBarManager?.statusBarFrame.height ?? 0

こいつでいける的な記事を見つけたのでUIViewControllerのviewDidLoadで試してみたのですが取得できず。。。 画面単位でstoryboardを分割しているせいか、TabBarControllerとNavigationControllerを組み合わせているがいけないのか、ただのバグか。。。(泣)

これでいけた!

SceneDelegate.swiftのscene()に記述すれば取得することができました。

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let scene = (scene as? UIWindowScene) else { return }
        let height = window.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
    }

コメント

  1. torina より:

    有益な記事をありがとうございます。
    ひとつわからなかったのですが、scene()ないに記述したheightにはviewcontrollerからどのようにアクセスするのでしょうか?

    • tm292901414 より:

      記事内ではローカル変数で書きましたが、Static classのプロパティに高さを保存しておいて、グローバル変数としてプロジェクト全体で使用できます。

タイトルとURLをコピーしました