こんちには、フリーの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
}
コメント
有益な記事をありがとうございます。
ひとつわからなかったのですが、scene()ないに記述したheightにはviewcontrollerからどのようにアクセスするのでしょうか?
記事内ではローカル変数で書きましたが、Static classのプロパティに高さを保存しておいて、グローバル変数としてプロジェクト全体で使用できます。