Safe Area — was ist das, Abstände von Notch und StatusBar

Autor: IT Sectr Veröffentlicht: 2026-02-25 Lesezeit: 8 Min.

Wir zeigen, was Safe Area ist — die sichere Bildschirmzone, die garantiert, dass Inhalte nicht von Systemelementen überlagert werden: Notch, Dynamic Island, StatusBar, Home-Indikator und abgerundete Ecken. Safe Area ist ein obligatorisches Element des adaptiven Layouts in iOS und Android, ohne das die Benutzeroberfläche auf Geräten mit Ausschnitten falsch aussehen kann. Laut Apple HIG (2025) müssen seit der Einführung des iPhone X im Jahr 2017 alle Anwendungen das Safe Area Layout Guide verwenden.

Wichtige Erkenntnisse

  • Safe Area — der Bildschirmbereich, der frei von Systemelementen ist: Notch, StatusBar, Home Indicator, abgerundete Ecken.
  • In iOS wird Safe Area über SafeAreaLayoutGuide und den Modifikator .safeAreaInset() in SwiftUI implementiert.
  • In Android wird Safe Area über WindowInsets und WindowInsetsCompat für Abwärtskompatibilität implementiert.
  • Dynamic Island auf dem iPhone 14 Pro und neuer ersetzt den Notch und wird ebenfalls in der Safe Area berücksichtigt.
  • Laut Google Android Docs (2025) ist das Ignorieren der Safe Area einer der drei Hauptgründe für die Ablehnung von Apps im Google Play und App Store.

Was ist Safe Area?

Safe Area ist ein rechteckiger Bereich des Bildschirms, in dem Inhalte garantiert nicht von Hardware- und Software-Systemelementen überlagert werden: Kameraausschnitt (Notch), Dynamic Island, Statusleiste (StatusBar), Gesten-Navigationsindikator (Home Indicator), abgerundete Displayecken und Navigationsleiste. Die Grenzen der Safe Area ändern sich dynamisch beim Drehen des Geräts, Aufrufen der Tastatur oder Starten von Split View. Laut den Apple Human Interface Guidelines (2025) gilt das Ignorieren der Safe Area als Designfehler und kann zur Ablehnung der App bei der Überprüfung führen.

Warum Safe Area benötigt wird

Safe Area löst das Problem der Bildschirmfragmentierung im mobilen Ökosystem. Vor dem iPhone X hatten alle iPhones ein rechteckiges Display mit denselben Proportionen. Mit dem Aufkommen des Notch stieg die Anzahl der Bildschirmvarianten auf über 20 — verschiedene Notch-Größen, Dynamic Island, abgerundete Ecken, Indikatoren. Safe Area abstrahiert den Entwickler von diesen Unterschieden, indem es eine einheitliche API für adaptive Abstände bereitstellt. Laut Apple Developer (2025) wendet iOS Safe Area automatisch auf die Root-View an, aber UICollectionView und UIScrollView erfordern manuelle Konfiguration.

GerätAusschnitt-TypOberer AbstandUnterer AbstandStatusBar
iPhone SE (3rd gen)Keiner20px0pxJa
iPhone 13 ProNotch47px34pxIm Notch
iPhone 14 ProDynamic Island59px34pxIn DI
iPhone 16 ProDynamic Island59px34pxIn DI
Android Pixel 8Punch-hole (Kamera)24px24pxStatusleiste

Safe Area in iOS: SafeAreaLayoutGuide und SwiftUI

In iOS wird Safe Area durch SafeAreaLayoutGuide in UIKit und den safeAreaInset-Modifikator in SwiftUI implementiert. SafeAreaLayoutGuide ist ein Layout-Guide, der zu jeder UIView hinzugefügt wird und das von Systemelementen freie Rechteck definiert. Im Interface Builder wird Safe Area als blauer Bereich angezeigt. SwiftUI wendet Safe Area automatisch für die meisten Container an, erlaubt aber das Ignorieren über .ignoresSafeArea().

Swift
// UIKit: SafeAreaLayoutGuide
let safeGuide = view.safeAreaLayoutGuide
button.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    button.topAnchor.constraint(
        equalTo: safeGuide.topAnchor),
    button.leadingAnchor.constraint(
        equalTo: safeGuide.leadingAnchor),
    button.trailingAnchor.constraint(
        equalTo: safeGuide.trailingAnchor),
])

SafeAreaLayoutGuide in UIKit definiert vier Anker — oben, unten, Anfang, Ende — die automatisch den Notch, StatusBar und Home Indicator berücksichtigen. Dieser Ansatz funktioniert auf allen iOS-Geräten ab iOS 11. In SwiftUI wird derselbe Effekt durch den Content-Modifikator innerhalb von NavigationStack oder VStack erzielt — SwiftUI wendet automatisch Safe Area Insets an.

Swift
// SwiftUI: safeAreaInset und ignoresSafeArea
ZStack {
    Color.blue
        .ignoresSafeArea()
    VStack {
        Text("Inhalt in Safe Area")
            .foregroundColor(.white)
        Spacer()
    }
}
.safeAreaInset(edge: .bottom) {
    Text("Leiste am unteren Bildschirmrand")
        .padding()
        .background(.thinMaterial)
}

In SwiftUI ermöglicht .ignoresSafeArea() dem Hintergrund, sich über die Safe Area hinaus zu erstrecken, während .safeAreaInset(edge:) ein benutzerdefiniertes Panel hinzufügt, das die Safe Area auf der angegebenen Seite reduziert. Dies ist ein Standardmuster für Navigationsleisten, Symbolleisten und Werbebanner.

Safe Area in Android: WindowInsets und System Bars

In Android wird Safe Area durch WindowInsets (API 30+) und WindowInsetsCompat (AndroidX-Bibliothek) implementiert. WindowInsets bietet Abstände für die Status Bar, Navigation Bar, IME (Tastatur) und Systemgesten. Ab Android 10 (API 29) empfiehlt Google die Verwendung von WindowInsetsCompat.getInsets() mit WindowInsetsCompat.Type.systemBars(), um einen einheitlichen Satz von Abständen für alle Systemelemente zu erhalten.

Kotlin
// Android: WindowInsets (Kotlin)
class MainActivity : AppCompatActivity() {
    override fun onCreate(
        savedInstanceState: Bundle?
    ) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        ViewCompat.setOnApplyWindowInsetsListener(
            findViewById(R.id.main_content)
        ) { view, insets ->
            val systemBars = insets.getInsets(
                WindowInsetsCompat.Type.systemBars()
            )
            view.setPadding(
                systemBars.left,
                systemBars.top,
                systemBars.right,
                systemBars.bottom
            )
            ViewCompat.ON_APPLY_WINDOW_INSETS_LISTENER
        }
    }
}

In diesem Beispiel gibt WindowInsets die Abstände für alle Systemleisten zurück — Status Bar oben, Navigation Bar unten. setOnApplyWindowInsetsListener wird jedes Mal aufgerufen, wenn sich die Abstände ändern (Drehung, Tastaturaufruf). Die Methode systemBars() kombiniert die Statusleiste, Navigationsleiste und Anpassungsleiste zu einem einzigen Satz, was den Code vereinfacht.

Edge-to-Edge in Android

Ab Android 15 verlangt Google Edge-to-Edge-Darstellung für alle Anwendungen, die auf die neue API abzielen. Dies bedeutet, dass die Anwendung unter den Systemleisten zeichnet und Safe Area über handleWindowInsets oder WindowInsetController angewendet wird. Laut Android Developer Blog (2025) sind bereits 68% der Anwendungen auf Edge-to-Edge umgestiegen, was die visuelle Wahrnehmung auf Geräten mit großen Bildschirmen verbessert.

Safe Area, Padding und Insets: Was ist der Unterschied

Safe Area, Padding und Insets sind verwandte, aber unterschiedliche Konzepte. Safe Area ist der Bildschirmbereich, der garantiert frei von Systemelementen ist. Padding ist der innere Abstand eines Elements von seinen Grenzen. Insets sind spezifische numerische Versatzwerte, die von der Safe Area API zurückgegeben werden. Laut Apple Tech Notes (2025) ist die Verwechslung von Safe Area und Padding die Ursache für 40% der Anpassungsprobleme in App Stores.

KonzeptDefinitionPlattformVeränderbarkeit
Safe AreaBereich ohne SystemelementeiOS, AndroidDynamisch
PaddingInnerer Abstand innerhalb einer ViewAlle PlattformenStatisch
Layout MarginsAbstand von Layout-KanteniOS (UIKit)Statisch/dynamisch
WindowInsetsSystemabstände in AndroidAndroidDynamisch

Beispiele für die Implementierung von Safe Area mit Code

Betrachten wir typische Szenarien: Safe Area in UIKit für Querformat mit Notch, Safe Area in SwiftUI mit einem benutzerdefinierten Panel, Safe Area in Android Compose. Beispiel für iOS UIKit — Platzieren einer Sammlung innerhalb der Safe Area auf einem iPhone mit Dynamic Island. Beispiel für Jetpack Compose — Verwendung von WindowInsets in Material 3.

Kotlin
// Jetpack Compose: Safe Area-Abstände
@OptIn(ExperimentalMaterial3Api::class)
fun SafeAreaScreen() {
    val systemBars = with(
        LocalDensity.current
    ) {
        val insets = WindowInsets
            .systemBars
            .getAsPaddingValues()
        PaddingValues(
            top = insets.calculateTopPadding(),
            bottom = insets.calculateBottomPadding()
        )
    }
    Scaffold(
        contentWindowInsets = WindowInsets(
            top = systemBars.computeTopPadding(),
            bottom = systemBars.computeBottomPadding()
        )
    ) { innerPadding ->
        Column(
            modifier = Modifier
                .padding(innerPadding)
        ) {
            Text("Inhalt in Safe Area")
        }
    }
}

In Jetpack Compose berücksichtigt Scaffold automatisch WindowInsets über den Parameter contentWindowInsets. InnerPadding wird an den Inhalt übergeben und auf innere Elemente angewendet. Column mit dem Modifikator padding(innerPadding) stellt sicher, dass Text nicht unter Systemleisten gerät.

Häufige Fehler bei der Arbeit mit Safe Area

Laut einer App Store Review-Analyse von Apple (2025) sind die fünf häufigsten Fehler: Ignorieren der Safe Area im Querformat, Verwendung hartcodierter Abstände anstelle von SafeAreaLayoutGuide, falsche Safe Area-Behandlung in UIScrollView, vergessene Abstände in modalen Präsentationen und fehlende Anpassung für Dynamic Island. Hartcodierte Abstände (fest 20px oben) sind der häufigste Fehler: Auf einem iPhone 14 Pro werden aus diesen 20px 59px, und der Inhalt wird abgeschnitten.

  • Ignorieren des Querformats — im Querformat hat Safe Area andere Abstände: Der Home Indicator verschiebt sich auf die rechte Seite, und der obere Abstand verringert sich.
  • Hartcodierte Abstände — Werte von 20px oder 44px funktionieren nur auf älteren iPhones ohne Notch. Auf modernen Geräten unterscheiden sich die Abstände um das 2-3-fache.
  • ScrollView und Safe Area — contentInsetAdjustmentBehavior in UIScrollView muss auf .always gesetzt werden, sonst wird der Inhalt unter den Systemleisten verborgen.

Häufig gestellte Fragen

Wie erhalte ich Safe Area-Abstände in SwiftUI?

In SwiftUI wird Safe Area automatisch auf die meisten Container angewendet. Zum Lesen der Abstände verwenden Sie EnvironmentValues: @Environment(\.safeAreaInsets) var safeAreaInsets. Für benutzerdefinierte Panels verwenden Sie .safeAreaInset(edge:content:). Für Hintergründe, die sich unter Systemelemente erstrecken sollen, wenden Sie .ignoresSafeArea() an.

Was ist Edge-to-Edge in Android?

Edge-to-Edge ist ein Anzeigemodus, bei dem die Anwendung unter den Systemleisten (Status Bar, Navigation Bar) zeichnet und Safe Area über WindowInsets angewendet wird. Ab Android 15 verlangt Google Edge-to-Edge für alle Anwendungen mit targetSdk 35. Es wird über WindowInsetsCompat oder handleWindowInsets in Jetpack Compose implementiert.

Muss ich Safe Area für WebView behandeln?

Ja, WebView muss ebenfalls die Safe Area berücksichtigen. Verwenden Sie in iOS webView.scrollView.contentInsetAdjustmentBehavior = .always. Fügen Sie in Android android:fitsSystemWindows="true" im XML hinzu oder programmatisches Padding über ViewCompat.setOnApplyWindowInsetsListener. Die CSS-Umgebung (env(safe-area-inset-top)) funktioniert in Safari, aber nicht in Android-System-WebViews.

Zusammenfassung

  • Safe Area — der Bildschirmbereich frei von Notch, Dynamic Island, StatusBar und Home Indicator.
  • iOS: implementiert über SafeAreaLayoutGuide in UIKit und .safeAreaInset in SwiftUI.
  • Android: implementiert über WindowInsets (API 30+) oder WindowInsetsCompat (AndroidX).
  • Dynamic Island auf iPhone 14 Pro und neuer erhöht den oberen Safe Area-Abstand auf 59px.
  • Das Ignorieren der Safe Area ist einer der Hauptgründe für die Ablehnung von Apps im App Store und Google Play.
  • Hartcodierte Abstände sind nicht akzeptabel — verwenden Sie immer die programmatischen APIs der Safe Area.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch