Notch(ノッチ)は、iPhoneディスプレイ上部にある切り欠きで、フロントカメラ、スピーカー、Face IDセンサーを収めています。iPhone X(2017)で初めて導入されたノッチは、モバイルインターフェースデザインのアプローチを変えました。切り欠きの周囲の画面領域は、コンテンツの「デッドゾーン」となりました。インターフェースを適応させるため、AppleはSafe Areaを導入しました。これは、コンテンツがノッチ、丸い角、Home Indicatorにかからないことを保証するマージンです。Androidでは、同様の概念がsafeAreaInsets(iOS)とdisplayCutout + WindowInsets(Android)を通じて実装されています。
重要ポイント
Notch(切り欠き)は、スマートフォン画面の上部にある領域で、フロントカメラ、イヤピーススピーカー、近接センサー、環境光センサー、そしてiPhone X以降では赤外線Face IDカメラ、ドットプロジェクター、フラッドイルミネーター(TrueDepthカメラシステム)が配置されています。ノッチは、必要なすべてのセンサーを維持しながら、使用可能な画面領域を増やすために導入されました。上部ベゼルの代わりに、ディスプレイが切り欠きの周りを上方に拡張します。
寸法:標準的なiPhoneのノッチは、幅約~34mm(6.1インチモデルのポートレートで約~209pt)、高さ約~5mm(約~30pt)です。ノッチの両側には「耳」— 切り欠きの左右にある小さな画面セクションがあります。右の「耳」は通常、時刻、バッテリーインジケーター、Wi-Fiを表示し、左はキャリアとステータスを表示します。ランドスケープ方向では、iOSはステータスバーの全幅にわたって黒いバーでノッチを隠します。コンテンツは切り欠き領域に表示されません。
iPhoneだけではない:ノッチの概念は多くのAndroidメーカーに採用されました。Google Pixel 3 XL、OnePlus 6、Huawei P20、Xiaomi Mi 8 — すべてに切り欠きがありました。一部のメーカーはさらに進化しました。水滴型ノッチ、パンチホールカメラ(画面の穴)、スライダーカメラ(格納式モジュール)。現代のAndroidフラッグシップ(Samsung Galaxy S23+、Google Pixel 8 Pro)はパンチホールを使用しています。画面上部にカメラ用の最小限の穴で、広い切り欠きはありません。
Safe Areaとは、ビュー内の長方形領域で、システムインターフェース要素(ノッチ、丸い画面の角(corner radius)、Home Indicator、タブバー、ナビゲーションバー)によって確実に重ねられない領域です。Safe Areaの寸法は、UIView.safeAreaInsetsプロパティを通じて返されます。top、left、bottom、rightの値を持つUIEdgeInsetsです。ノッチ付きiPhoneの場合、top inset = ~44 pt(ポートレート)、または~0 pt(黒いバー付きランドスケープ)です。
// コンテンツ配置のためのsafeAreaInsetsの使用
class NotchAwareViewController: UIViewController {
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Safe Areaマージンの読み取り
let safeArea = self.view.safeAreaInsets
// デバッグ用の値のロギング
print("Top inset: \(safeArea.top)") // ~44 pt(ノッチあり)
print("Bottom inset: \(safeArea.bottom)") // ~34 pt(Home Indicatorあり)
// Safe Areaを使ったタイトルの配置
titleLabel.frame = CGRect(
x: safeArea.left + 16,
y: safeArea.top + 16,
width: self.view.bounds.width - safeArea.left - safeArea.right - 32,
height: 44
)
}
// Safe Area変更の処理(回転、Multi-Tasking)
override func viewSafeAreaInsetsDidChange() {
super.viewSafeAreaInsetsDidChange()
viewDidLayoutSubviews() // レイアウトの再計算
}
}Auto LayoutとSafe Area:Interface Builderでは、「Superview」の代わりにアンカーターゲットとして「Safe Area」を使用します。プログラムによるレイアウトには、safeAreaLayoutGuideを使用します: let guide = view.safeAreaLayoutGuide; titleLabel.topAnchor.constraint(equalTo: guide.topAnchor)。iOSは、デバイスの回転、iPadのSplit Viewへの移行、キーボードの表示/非表示、方向の変更時にsafeAreaInsetsを自動的に更新します。すべての標準UIKitコントローラー(UINavigationController、UITabBarController)は既にSafe Areaを考慮しています。カスタムビューとコントローラーは、明示的にsafeAreaInsetsを使用する必要があります。
DisplayCutoutは、API 28(Android 9.0)で追加されたAndroid SDKクラスで、画面上の切り欠き領域を記述します。WindowInsets.displayCutout()を介して取得できます。このクラスは、boundingBoxList(切り欠きを記述する矩形のリスト)とsafeInsetTop/safeInsetBottom/safeInsetLeft/safeInsetRight(安全なコンテンツ表示のための最小マージン)を返します。Androidは様々な切り欠き構成をサポートしています。中央(iPhoneのような)、側面(角にあるカメラ)、二重(2つのカメラ)、パンチホール。
// ActivityでのDisplayCutout向けインターフェース適応
class NotchAwareActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 切り欠き領域でのコンテンツ表示を許可(必要な場合)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
window.attributes.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
}
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
// WindowInsetsを介したDisplayCutoutの取得
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && hasFocus) {
val cutout = window.decorView.rootWindowInsets.displayCutout
val safeTop = cutout?.safeInsetTop ?: 0
// 上部コンテンツのマージン設定
headerView.updatePadding(top = safeTop)
}
}
}表示モード(layoutInDisplayCutoutMode):ALWAYS — コンテンツは切り欠き領域に表示可能(フルスクリーンアプリ、ビデオ、ゲーム用);NEVER — コンテンツは切り欠きを決して重ねず、システムがマージンを追加;SHORT_EDGES — コンテンツは短い端でのみ切り欠き領域に表示(上部ノッチ付きポートレートアプリ用)。デフォルトモードはSHORT_EDGES(Android 12以降)。パンチホールカメラの場合、切り欠きは小さく、多くのアプリは画面使用を最大化するためにALWAYSを使用します。
iPhone X(2017) — ノッチを備えた最初のAppleスマートフォン。切り欠きにはFace ID用のTrueDepthカメラ(赤外線カメラ、ドットプロジェクター、フラッドイルミネーターのシステム)が含まれていました。切り欠きの寸法:約34 mm × 5 mm。iOS 11で、Appleはアプリ適応のためのSafe Areaを導入しました。ユーザーは意見が分かれました。一部はFace IDに必要なものとしてノッチを受け入れ、他の人は「切り取られた」画面として批判しました。
iPhone 13(2021) — Appleはスピーカーを上部ベゼルに移動することでノッチを20%縮小しました。これが最後のクラシックなノッチでした。iPhone 14と14 Plus(2022)は縮小されたノッチを維持しました。iPhone 14 ProとPro MaxはDynamic Islandを導入しました。これは、カメラとFace IDセンサーを組み合わせた楕円形の切り欠きで、動的に形状を変え、システム通知(タイマー、音楽、AirPods接続)を表示します。Dynamic Islandは独自のAPI(ActivityKit、Live Activities)を持つソフトウェアプラットフォームになりました。
| 世代 | 切り欠きの種類 | 特徴 | Safe Area Top |
|---|---|---|---|
| iPhone X–XS(2017–2018) | 大きなノッチ | Face ID、34×5 mm | 44 pt |
| iPhone XR(2018) | Notch | Touch ID、より小さいノッチ | 44 pt |
| iPhone 11(2019) | Notch | Face ID、広い切り欠き | 44 pt |
| iPhone 12(2020) | Notch | スピーカーをベゼルに移動 | 44 pt |
| iPhone 13(2021) | 縮小ノッチ | 20%小型化 | 44 pt |
| iPhone 14 / 14 Plus(2022) | 縮小ノッチ | Face IDなし(14 Plus) | 44 pt |
| iPhone 14 Pro(2022) | Dynamic Island | 適応型切り欠き | 54 pt |
| iPhone 15–16(2023–2024) | Dynamic Island | ActivityKit、Live Activities | 54 pt |
Dynamic Islandは単なる切り欠きではなく、インタラクティブなインターフェース要素です。AirPodsを接続すると、アイランドが拡張してアイコンとステータスを表示します。タクシーを呼ぶと(Uber)、到着時間が表示されます。アプリを最小化すると、タイマーがアイランドに表示されます。Dynamic IslandはiPhone 14 Pro/Pro Max、iPhone 15/15 Pro/15 Pro Max、iPhone 16/16 Pro/16 Pro Maxで利用可能です。Dynamic IslandのSafe Area:top inset = 54 pt(クラシックノッチより10 pt大きい)。
ノッチの後ろにコンテンツを隠さないでください — 自動マージン計算にはSafe AreaまたはDisplayCutoutを使用してください。固定のマージン値(例:44 pt)を設定しないでください。デバイスや方向によって異なります。Safe Areaを読み取るには常にシステムAPIを使用してください:iOSのsafeAreaInsets、AndroidのwindowInsets.displayCutout。これにより、すべてのデバイスで正しい表示が保証されます:iPhone SE(ノッチなし)、iPhone 14 Pro(ノッチあり)、iPhone 15(Dynamic Island)、iPad(ノッチなし、ただしHome Indicatorあり)。
ランドスケープ方向 — 特別なリスク領域です。ランドスケープでノッチ付きiPhoneでは、iOSは自動的にステータスバーの全幅にわたって黒いバーを追加します(コンテンツはノッチの左右に表示されません)。これは、Safe Area inset = 0 top、ただし拡大されたleft/right insets(~47 pt)によって行われます。この動作を無効にしようとしないでください。App Storeはランドスケープでコンテンツに画面の「禁止」領域を使用するアプリを拒否します。フルスクリーンビデオには、自動的にコントロールをノッチ領域外に配置するAVPlayerViewControllerを使用してください。
| ルール | iOS | Android |
|---|---|---|
| マージンAPI | safeAreaInsets / safeAreaLayoutGuide | WindowInsets.displayCutout.safeInsetTop |
| 回転適応 | viewSafeAreaInsetsDidChange | onWindowFocusChanged |
| フルスクリーンモード | prefersStatusBarHidden = true | SYSTEM_UI_FLAG_FULLSCREEN |
| ステータスバーコンテンツ | ノッチ周辺の「耳」に自動表示 | layoutInDisplayCutoutMode経由 |
| ランドスケープ | 黒いバー(自動) | WindowInsetsからのマージン |
| ビデオ/ゲーム | AVPlayerViewController(安全) | LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS |
背景とステータスバー:カスタム背景色を使用する場合、ノッチの後ろの領域を含む画面全体を塗りつぶす必要があります。ステータスバーの上にコンテンツを描画しないでください。Safe Areaを使用してください。ダークモードの場合、ステータスバーが読みやすいことを確認してください。背景スタイルに合わせてpreferredStatusBarStyleを設定します(明るい背景の暗いテキストには.default、暗い背景の明るいテキストには.lightContent)。
シミュレーターとエミュレーター:Xcodeはノッチ付きのすべてのiPhoneモデル(iPhone X–14)とDynamic Island(iPhone 14 Pro–15)のシミュレーターを提供します。Android Studioは様々な切り欠き構成(Google Pixel 3 XL、カスタム切り欠きエミュレーター)のエミュレーターを提供します。ポートレートとランドスケープ方向、キーボードありとなし、Split View(iPad)でテストしてください。すべてのコンテンツが読みやすく、隠れていないことを確認してください。
実機:シミュレーターと実機ではノッチが異なる場合があります。例えば、iPhone 14 ProシミュレーターはDynamic Islandを表示しますが、実際のインタラクティブ性(Live Activities)はありません。Androidの場合、パンチホールカメラは正確にエミュレートされない可能性があります。最善の方法は実機でテストすることです。最小セット:iPhone SE(ノッチなし)、iPhone 14(ノッチあり)、iPhone 15 Pro(Dynamic Island)、パンチホール付きAndroid、ウォーターフォール画面付きAndroid(Samsung Edge)。
ツール:iOSの場合、「Show Safe Area Insets」オプション付きのXcode View Debuggerを使用すると、Safe Areaの境界が視覚的に表示されます。Androidの場合 — Android StudioのLayout Inspectorで、AttributesパネルにWindowInsetsとDisplayCutoutが表示されます。Accessibility Inspectorも便利で、Safe Area内のすべての要素がVoiceOver/TalkBackでアクセス可能かどうかを確認できます。ノッチはないがHome Indicator(下部マージン約21 pt)と丸い角があるiPadを忘れないでください。
よくある質問
ノッチ(X–14)付きiPhoneのポートレート方向:top = 44 pt、left = 0、right = 0、bottom = 34 pt(Home Indicator)。Dynamic Island(14 Pro–16)付きiPhone:top = 54 pt、bottom = 34 pt。iPhone SE(ノッチなし):top = 20 pt(ステータスバー)、bottom = 0 pt(Home Indicatorなしの場合)または21 pt(Home Indicator付きモデルの場合)。ランドスケープではtop = 0、left = 47 pt、right = 47 pt、bottom = 21 pt。
NotchはカメラとFace IDセンサーのための静的な切り欠きです。Dynamic Islandは形状を変え、通知、タイマー、Live Activitiesを表示するソフトウェア・ハードウェア要素です。Dynamic IslandはiPhone 14 Pro以降で利用可能です。Dynamic IslandのSafe Areaは大きいです(top = 54 pt、ノッチの44 ptに対して)。Dynamic Islandはサードパーティ開発者向けにActivityKit APIをサポートしています。
Androidでは、DisplayCutoutマージンはWindowInsetsを介して取得されます。呼び出し:decorView.rootWindowInsets.displayCutout?.safeInsetTop。API 28+(Android 9)対応。表示モードはwindow.attributes.layoutInDisplayCutoutModeで制御:NEVER(マージン)、SHORT_EDGES(短い端にマージン)、ALWAYS(マージンなし)。パンチホールカメラの場合、safeInsetTopはステータスバーの高さ(約24 dp)と同じです。
ランドスケープ方向では、iOSは自動的に画面の両側に黒いバーを追加して、コンテンツが切り欠き領域に表示されないようにします。これはSafe Area insets(left/right約47 pt)によって制御されるシステム動作です。理由:ランドスケープでは、ノッチの両側の「耳」が有用なコンテンツを表示するには小さすぎます。フルスクリーンアプリ(ビデオ、ゲーム)では、自動プレーヤー制御付きのAVPlayerViewControllerを使用できます。
はい、App Storeで公開されるすべてのアプリにはSafe Areaの使用が必須です。Appleはレビュー時にこれを確認します。コンテンツがノッチ、丸い角、またはHome Indicatorによって隠れている場合、アプリは却下されます。Androidでは、切り欠き適応にWindowInsetsを使用することをお勧めします。Android 12以降、SHORT_EDGESモードがデフォルトであり、システムはカスタムレイアウトを使用しないアプリに自動的に切り欠きマージンを追加します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。