5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】Screen.safeAreaとiOSステータスバーの罠(?)

Last updated at Posted at 2020-01-31

Unityで取得できる Screen.safeAreaには罠(?)がある

罠に遭遇したのは、以下の条件

  • 4.7インチiPhone(iPhone6/7など)
  • Unity2017.4.35, 2018.4.15
  • iOS10
OS Screen.safeArea.h Screen.height ステータスバー高さ
iOS12 1294 1334 40
iOS10 1334 1334 40
  • iOS11以降だとsafeAreaのRectは正しくステータスバーを避けてくれるが、iOS10だと重なってしまう

原因

  • そもそもsafeAreaの導入がiOS11から
  • Screen.safeAreaは単純にsafeAreaInsetsをOS判定して取得しているだけだと思われる
    • iOS10以下はエラーにならないようにしているだけ?

解決策

  • OSを取得して分岐するしかなさそう
  • iOS10以下ならiPhoneX系統は存在しないから、ステータスバーは 20 x scale で固定…?
    • scaleを取得するにも結局plugin書かないとなので、topLayoutGuide、bottomLayoutGuideあたりを使うのが良さそう

参考

余談

  • この記事を検証するにあたってシミュレーターで実行しようとして色々色々罠にハマった…
  • 警告に従って、Graphics APIsにGLES3を「追加」すると、シミュレーターでのアプリ起動時に UnityInitApplicationGraphics で停止してしまう
  • 正解は、「追加」ではなく入れ替え(Metalは削除)
  • が、ES3に入れ替えたバージョンでiOS13の検証はできたが、iOS10のシミュレーターで実行しようとすると再びUnityInitApplicationGraphics で停止
  • 未検証だが、ES2にするべきなのかもしれない
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?