はじめに
画像はiPad Pro - Apple(日本)より
2018年10月30日に行われた Apple Special Event にて、新型iPad Pro (2018) が発表されました。
上の画像を見てわかるように、ホームボタンがなくなり、画面の下部にHome Indicator
を持つ初のiPadの登場となりました。
また、ベゼルが少なくなり、スクリーンの角が丸みを帯びていることがわかります。
これらのことから、今回の新型iPad Pro (2018) は今までの端末には無い新たなsafeAreaInsets
の値のパターンを持っているのではないかと、気になって気になって1日たったの8時間しか眠れなかったのですが、先日リリースされたXcode 10.1
に新型iPad Pro (2018) のSimulatorが追加されていましたので、safeAreaInsets
の値を検証してみることにしました。
検証環境
- macOS High Sierra 10.13.6
- Xcode 10.1
- Simulator
- iPad Pro (11-inch) - iOS 12.1
- iPad Pro (12.9-inch) (3rd generation) - iOS 12.1
検証方法
1. プロジェクトの作成
新規プロジェクトの作成で「Single View App」テンプレートから1枚のViewControllerを持ったプロジェクトを作成します。
2. 背景色を持ったUIViewをSafeAreaに対して追加
「Main.storyboard」を開き、ViewControllerのview上に白以外の背景色を持ったUIViewを配置し、以下の図のようにSafe Area
(safeAreaLayoutGuide) の各Edge (top, bottom, leading, trailing) に対して、配置したviewの各Edgeとの制約を追加します。

3. view.safeAreaInsetsの値をコンソールに出力
「ViewController.swift」を開き、ソースコードを以下のように書き換えます。override func viewWillLayoutSubviews()
はViewController
のライフサイクルの中で最も早くview.safeAreaInsets
が確定するタイミングなので、この中で出力するようにしています。
あとは実行し、ログを確認することで、safeAreaInsets
の値がわかります。
import UIKit
class ViewController: UIViewController {
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
// `view.safeAreaInsets`の値を出力
print(view.safeAreaInsets)
}
}
検証結果
safeAreaInsetsの値の変化に関する検証結果
今回の新型iPad Pro (2018) は上下左右ともベゼルの幅が同じため、画面回転やSlideOverによる画面分割を行っても、safeAreaInsets
の値は 1つの画面構成パターンに対して1つのパターンのみ になるということがわかりました。
また、iPad Pro (11-inch)
とiPad Pro (12.9-inch) (3rd generation)
にはsafeAreaInsets
の値の差はありませんでした。
画面構成パターン別検証結果
ViewControllerのみの場合

UIEdgeInsets(top: 24.0, left: 0.0, bottom: 20.0, right: 0.0)
NavigationController + ViewControllerの場合

UIEdgeInsets(top: 74.0, left: 0.0, bottom: 20.0, right: 0.0)
TabBarController + ViewControllerの場合

UIEdgeInsets(top: 24.0, left: 0.0, bottom: 65.0, right: 0.0)
NavigationController + TabBarController + ViewControllerの場合

UIEdgeInsets(top: 74.0, left: 0.0, bottom: 65.0, right: 0.0)
最後に
今年の9月に発表されたiPhone XS, XS Max, XRと今回発表された新型iPad Pro (2018) の流れを見る限り、今後のAppleの新デバイスはFace IDを活用したホームボタン無しのHome Indicator
を持ったデバイスがどんどん増えていくと思われます。
そのため、今後のiOSアプリ開発ではSafeAreaを考慮したレイアウトやデザインを意識することが必須となっていくのではないかと思いました。
これで今夜からはぐっすりと眠れそうです。
それでは皆様、おやすみなさい。
最後まで読んでいただき、ありがとうございました。(寝言)