Safe Area — wat is het, afstanden van notch en StatusBar

Auteur: IT Sectr Gepubliceerd: 2026-02-25 Leestijd: 8 min

We laten zien wat Safe Area is — de veilige zone van het scherm die garandeert dat inhoud niet wordt bedekt door systeemelementen: notch, Dynamic Island, StatusBar, Home-indicator en afgeronde hoeken. Safe Area is een verplicht onderdeel van adaptieve lay-out in iOS en Android, zonder welke de interface er onjuist kan uitzien op apparaten met uitsparingen. Volgens Apple HIG (2025) moeten alle apps sinds de introductie van de iPhone X in 2017 de Safe Area Layout Guide gebruiken.

Belangrijkste punten

  • Safe Area — het schermgebied vrij van systeemelementen: notch, StatusBar, Home Indicator, afgeronde hoeken.
  • In iOS wordt Safe Area geïmplementeerd via SafeAreaLayoutGuide en de .safeAreaInset()-modifier in SwiftUI.
  • In Android wordt Safe Area geïmplementeerd via WindowInsets en WindowInsetsCompat voor ondersteuning van oudere versies.
  • Dynamic Island op iPhone 14 Pro en nieuwer vervangt notch en wordt ook meegenomen in Safe Area.
  • Volgens Google Android Docs (2025) is het negeren van Safe Area een van de drie belangrijkste redenen voor afwijzing van apps in Google Play en App Store.

Wat is Safe Area?

Safe Area — is een rechthoekig schermgebied waarin de inhoud gegarandeerd niet wordt bedekt door hardware- en software-systeemelementen: de camera-uitsparing (notch), Dynamic Island, de statusbalk (StatusBar), de navigatie-indicator voor gebaren (Home Indicator), afgeronde schermhoeken en het navigatiepaneel. De grenzen van Safe Area veranderen dynamisch bij draaien van het apparaat, oproepen van het toetsenbord of starten van Split View. Volgens Apple Human Interface Guidelines (2025) wordt het negeren van Safe Area beschouwd als een ontwerpfout en kan leiden tot afwijzing van de app tijdens de review.

Waarom is Safe Area nodig

Safe Area lost het probleem van schermfragmentatie in het mobiele ecosysteem op. Vóór de iPhone X hadden alle iPhones een rechthoekig scherm met dezelfde verhoudingen. Met de komst van notch groeide het aantal schermvarianten tot 20+ — verschillende maten uitsparingen, Dynamic Island, afrondingen, indicatoren. Safe Area abstraheert de ontwikkelaar van deze verschillen door een uniforme API voor adaptieve afstanden te bieden. Volgens Apple Developer (2025) past iOS automatisch Safe Area toe voor de root view, maar voor UICollectionView en UIScrollView is handmatige configuratie vereist.

ApparaatType uitsparingBovenste afstandOnderste afstandStatusBar
iPhone SE (3rd gen)Geen20px0pxJa
iPhone 13 ProNotch47px34pxIn notch
iPhone 14 ProDynamic Island59px34pxIn DI
iPhone 16 ProDynamic Island59px34pxIn DI
Android Pixel 8Punch-hole (camera)24px24pxStatusbalk

Safe Area in iOS: SafeAreaLayoutGuide en SwiftUI

In iOS wordt Safe Area geïmplementeerd via SafeAreaLayoutGuide in UIKit en de safeAreaInset-modifier in SwiftUI. SafeAreaLayoutGuide is een lay-outgids die aan elke UIView wordt toegevoegd en de rechthoek vrij van systeemelementen definieert. In Interface Builder wordt Safe Area weergegeven als een blauw gebied. SwiftUI past Safe Area automatisch toe voor de meeste containers, maar staat toe deze te negeren via .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 definieert vier anchors — top, bottom, leading, trailing — die automatisch rekening houden met notch, StatusBar en Home Indicator. Deze aanpak werkt op alle iOS-apparaten vanaf iOS 11. In SwiftUI wordt hetzelfde effect bereikt via de inhoudsmodifier binnen NavigationStack of VStack — SwiftUI past automatisch Safe Area Insets toe.

Swift
// SwiftUI: safeAreaInset en ignoresSafeArea
ZStack {
    Color.blue
        .ignoresSafeArea()
    VStack {
        Text("Inhoud in Safe Area")
            .foregroundColor(.white)
        Spacer()
    }
}
.safeAreaInset(edge: .bottom) {
    Text("Balk onderaan het scherm")
        .padding()
        .background(.thinMaterial)
}

In SwiftUI zorgt .ignoresSafeArea() ervoor dat de achtergrond buiten Safe Area kan uitstrekken, en .safeAreaInset(edge:) voegt een aangepast paneel toe dat Safe Area aan de aangegeven kant verkleint. Dit is het standaard patroon voor navigatiepanelen, werkbalken en advertentiebanners.

Safe Area in Android: WindowInsets en System Bars

In Android wordt Safe Area geïmplementeerd via WindowInsets (API 30+) en WindowInsetsCompat (AndroidX-bibliotheek). WindowInsets biedt afstanden voor Status Bar, Navigation Bar, IME (toetsenbord) en systeemgebaren. Vanaf Android 10 (API 29) beveelt Google aan om WindowInsetsCompat.getInsets() te gebruiken met het type WindowInsetsCompat.Type.systemBars() om een uniforme set afstanden voor alle systeemelementen te verkrijgen.

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 dit voorbeeld retourneert WindowInsets afstanden voor alle systeembalken — Status Bar boven, Navigation Bar onder. setOnApplyWindowInsetsListener wordt elke keer aangeroepen wanneer insets veranderen (draaien, toetsenbordoproep). De methode systemBars() combineert de statusbalk, navigatiebalk en aanpassingsbalk in één set, wat de code vereenvoudigt.

Edge-to-Edge in Android

Vanaf Android 15 vereist Google edge-to-edge weergave voor alle apps die de nieuwe API targeten. Dit betekent dat de app onder de systeembalken wordt getekend en Safe Area wordt toegepast via handleWindowInsets of WindowInsetController. Volgens Android Developer Blog (2025) is 68% van de apps al overgestapt op edge-to-edge, wat de visuele perceptie op apparaten met grote schermen verbetert.

Safe Area, Padding en Insets: wat is het verschil

Safe Area, Padding en Insets — gerelateerde maar verschillende concepten. Safe Area is het schermgebied dat gegarandeerd vrij is van systeemelementen. Padding is de binnenste afstand van een element vanaf zijn grenzen. Insets zijn de specifieke numerieke afstandswaarden die door de Safe Area API worden geretourneerd. Volgens Apple Tech Notes (2025) is verwarring tussen Safe Area en Padding de oorzaak van 40% van de aanpasbaarheidsproblemen in app-winkels.

ConceptDefinitiePlatformVeranderlijkheid
Safe AreaGebied zonder systeemelementeniOS, AndroidDynamisch
PaddingBinnenste afstand binnen viewAlle platformsStatisch
Layout MarginsAfstand van layout randeniOS (UIKit)Statisch/dynamisch
WindowInsetsSysteemafstanden AndroidAndroidDynamisch

Voorbeelden van Safe Area-implementatie met code

Laten we typische scenario's bekijken: Safe Area in UIKit voor horizontale oriëntatie met notch, Safe Area in SwiftUI met aangepast paneel, Safe Area in Android Compose. Voorbeeld voor iOS UIKit — plaatsing van een collectie binnen Safe Area op iPhone met Dynamic Island. Voorbeeld voor Jetpack Compose — gebruik van WindowInsets in Material 3.

Kotlin
// Jetpack Compose: afstanden van Safe Area
@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("Inhoud in Safe Area")
        }
    }
}

In Jetpack Compose houdt Scaffold automatisch rekening met WindowInsets via de parameter contentWindowInsets. InnerPadding wordt doorgegeven aan content en toegepast op interne elementen. Column met de modifier padding(innerPadding) garandeert dat tekst niet onder de systeembalken terechtkomt.

Veelvoorkomende fouten bij het werken met Safe Area

Volgens een analyse van App Store Review door Apple (2025) zijn de vijf meest voorkomende fouten: het negeren van Safe Area in horizontale oriëntatie, het gebruik van hardgecodeerde afstanden in plaats van SafeAreaLayoutGuide, onjuiste verwerking van Safe Area in UIScrollView, vergeten afstanden in modale presentaties en het ontbreken van aanpassing voor Dynamic Island. Hardgecodeerde afstanden (hardcoded 20px bovenaan) — de meest voorkomende fout: op iPhone 14 Pro worden deze 20px 59px en wordt de inhoud afgesneden.

  • Negeren van horizontale oriëntatie — in horizontale oriëntatie heeft Safe Area andere afstanden: Home Indicator verschuift naar rechts en de bovenste afstand wordt kleiner.
  • Hardgecodeerde afstanden — waarden van 20px of 44px zijn alleen geschikt voor oude iPhones zonder uitsparing. Op moderne apparaten verschillen de afstanden 2-3 keer.
  • ScrollView en Safe Area — contentInsetAdjustmentBehavior in UIScrollView moet worden ingesteld op .always, anders wordt de inhoud verborgen onder systeembalken.

Veelgestelde vragen

Hoe krijg ik Safe Area-afstanden in SwiftUI?

In SwiftUI wordt Safe Area automatisch toegepast op de meeste containers. Gebruik EnvironmentValues om afstanden te lezen: @Environment(.safeAreaInsets) var safeAreaInsets. Gebruik .safeAreaInset(edge:content:) voor aangepaste panelen. Voor achtergrond die onder systeemelementen moet uitstrekken, pas .ignoresSafeArea() toe.

Wat is edge-to-edge in Android?

Edge-to-edge — een weergavemodus waarbij de app onder systeembalken (Status Bar, Navigation Bar) wordt getekend en Safe Area wordt toegepast via WindowInsets. Vanaf Android 15 vereist Google edge-to-edge voor alle apps met targetSdk 35. Het wordt geïmplementeerd via WindowInsetsCompat of handleWindowInsets in Jetpack Compose.

Moet ik Safe Area verwerken voor WebView?

Ja, WebView moet ook rekening houden met Safe Area. Gebruik in iOS webView.scrollView.contentInsetAdjustmentBehavior = .always. Voeg in Android android:fitsSystemWindows="true" toe in XML of programmatische padding via ViewCompat.setOnApplyWindowInsetsListener. De CSS-omgeving (env(safe-area-inset-top)) werkt in Safari, maar niet in systeem-WebViews van Android.

Samenvatting

  • Safe Area — schermgebied vrij van notch, Dynamic Island, StatusBar en Home Indicator.
  • iOS: geïmplementeerd via SafeAreaLayoutGuide in UIKit en .safeAreaInset in SwiftUI.
  • Android: geïmplementeerd via WindowInsets (API 30+) of WindowInsetsCompat (AndroidX).
  • Dynamic Island op iPhone 14 Pro en nieuwer vergroot de bovenste Safe Area-afstand tot 59px.
  • Het negeren van Safe Area is een van de belangrijkste redenen voor afwijzing van apps in App Store en Google Play.
  • Hardgecodeerde afstanden zijn onaanvaardbaar — gebruik altijd de programmatische Safe Area API's.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook