SafeAreaView — vad är det, layout med Safe Area i React Native

Författare: IT Sectr Publicerad: 2026-07-06 Lästid: 10 min

SafeAreaView — React Native-komponent för layout med hänsyn till skärmens säkra område på enheter med urtag och rundningar. På iPhone med Notch och Dynamic Island kan innehåll täckas av kamera och indikatorer. SafeAreaView lägger automatiskt till marginaler och förhindrar att gränssnittet kapas av systemelement. Läs mer om Safe Area i Metas officiella dokumentation.

Huvudpunkter

  • SafeAreaView — komponent som automatiskt lägger till marginaler för skärmens säkra område på iOS och Android
  • Notch och Dynamic Island kräver övre marginaler som SafeAreaView beräknar automatiskt
  • Android — komponenten tar hänsyn till statusfältet och systemets navigeringsknappar
  • Alternativ: useSafeAreaInsets från react-native-safe-area-context för flexibel kontroll av marginaler
  • Edge-to-edge-skärmar kräver obligatorisk användning av SafeAreaView för korrekt layout

Vad är SafeAreaView?

SafeAreaView — React Native-komponent som automatiskt lägger till inre marginaler (padding) så att innehåll inte täcks av systemets gränssnittselement: statusfält, Notch, Dynamic Island och systemets navigeringspanel. Komponenten dök upp i React Native 0.50 för iOS och utökades senare för Android.

På iOS använder SafeAreaView det inbyggda UIView.safeAreaInsets, som introducerades i iOS 11 (2017). På Android tar komponenten hänsyn till WindowInsets — systemmarginaler tillgängliga från Android 5.0 (API 21). Enligt Apple-data (2026) har 92% av aktiva iPhones en skärm med urtag eller Dynamic Island.

Varför Safe Area behövs

Konceptet Safe Area — en del av Apples HIG-rekommendationer (Human Interface Guidelines). Före iPhone X (2017) var hela skärmytan säker. Med Notchens uppkomst definierade Apple områden där innehåll inte bör placeras: kameraurtag, tid- och batteriindikator, hemindikator. Android införde ett liknande koncept med uppkomsten av skärmar med urtag 2018.

Hur Safe Area fungerar på iOS och Android

På iOS läser SafeAreaView safeAreaInsets från den inbyggda layout-guiden. Den övre marginalen inkluderar statusfältets höjd (vanligtvis 44 eller 50 punkter för iPhone med Notch). Nedre marginal — 34 punkter för hemindikatorn (Home Indicator). Android använder WindowInsets — övre marginal för statusfältet och nedre för systemnavigering.

PlattformÖvre marginalNedre marginalKälla
iOS (Notch)44-50 pt34 ptsafeAreaInsets.top / .bottom
iOS (utan Notch)20 pt0 ptsafeAreaInsets.top / .bottom
Android (med urtag)24-48 dp24-48 dpWindowInsets.systemBarsInsets
Android (utan urtag)24 dp0 dpWindowInsets.statusBarsInsets

Viktigt: SafeAreaView tillämpar padding automatiskt, men endast för rotbehållaren. Nästlade komponenter får inget skydd — varje skärm bör ha sin egen SafeAreaView. För modala fönster och BottomSheet, ta hänsyn till marginaler separat.

Notch, Dynamic Island och systempaneler

Notch — ett hårdvaruurtag i den övre delen av skärmen som innehåller kamera och sensorer. Dök upp i iPhone X (2017). Dynamic Island — ett mjukvaru-hårdvaruområde på iPhone 14 Pro och nyare som ersätter Notch med ett interaktivt element. Båda kräver en övre marginal på 50-56 pt.

På Android har urtag olika former: tårform, hål i hörnet (punch-hole), remsa under kameran. SafeAreaView på Android använder WindowInsets som tar hänsyn till urtagets form. För applikationer i liggande orientering läggs sidomarginaler till så att innehåll inte täcks av systemelement.

js
import React from 'react';
import { SafeAreaView, View, Text } from 'react-native';

const App = () => (
  <SafeAreaView style={{ flex: 1 }}>
    <View style={styles.content}>
      <Text>Content is safe from Notch and system bars</Text>
    </View>
  </SafeAreaView>
);

Edge-to-edge-metoden (Android 15+) rekommenderar att innehåll ritas under systempaneler, men med hänsyn till marginaler för interaktiva element. SafeAreaView hjälper till att upprätthålla denna balans: bakgrunden ritas under panelerna, knappar och text i den säkra zonen.

Användning och alternativ till SafeAreaView

SafeAreaView — det enklaste sättet att skydda innehåll, men inte alltid flexibelt. Komponenten tillämpar samma marginaler på alla sidor, vilket är obekvämt när olika padding behövs för olika kanter. Till exempel kan sidomarginaler vara onödiga och den nedre endast för en knapp.

Huvudalternativ: useSafeAreaInsets från react-native-safe-area-context (mest flexibla lösningen), StatusBar.currentHeight på Android, Platform.OS med manuell kontroll av enhetsmodell. För komplexa fall, använd en kombination av SafeAreaView för den allmänna behållaren och useSafeAreaInsets för enskilda element.

js
import { useSafeAreaInsets } from 'react-native-safe-area-context';

const CustomHeader = () => {
  const insets = useSafeAreaInsets();

  return (
    <View style={{ paddingTop: insets.top }}>
      <Header />
    </View>
  );
};

Biblioteket react-native-safe-area-context — de facto-standard för arbete med Safe Area i React Native. Det stöds av Expo, React Navigation och de flesta UI-verktygssatser. Det tillhandahåller både en hook och en Consumer-komponent för funktionella och klassbaserade tillvägagångssätt.

react-native-safe-area-context för full kontroll

react-native-safe-area-context — bibliotek som tillhandahåller ett mer flexibelt API än den inbyggda SafeAreaView. Den främsta fördelen — åtkomst till enskilda marginalvärden (top, bottom, left, right) via hooken useSafeAreaInsets, vilket möjliggör selektiv tillämpning.

Biblioteket tillhandahåller också SafeAreaProvider — en komponent som är obligatorisk på applikationens översta nivå. Den prenumererar på förändringar i systemmarginaler vid skärmrotation eller tangentbordsöppning. React Navigation använder detta bibliotek som standard.

SafeAreaView från react-native-safe-area-context skiljer sig från den inbyggda: fungerar på fler enheter och stöder animation av marginalförändringar. För ett nytt projekt rekommenderas att installera detta bibliotek som ett beroende och använda dess SafeAreaView istället för den inbyggda.

Vanliga misstag vid arbete med SafeAreaView

SafeAreaView används ofta felaktigt. Första misstaget — att linda varje komponent i SafeAreaView, vilket skapar dubbla marginaler. Regel: en SafeAreaView per rotskärmvy. Nästlade komponenter ärver marginaler genom Flex-layout.

Andra misstaget — att ignorera Android. På Android använder SafeAreaView WindowInsets, som kan variera på olika OS-versioner. På Android 15+ kan systempaneler vara transparenta och marginaler ändras. Testa alltid SafeAreaView på verkliga enheter, inte bara i emulatorn.

Tredje misstaget — hårdkodad padding. Använd aldrig Platform.OS === 'ios' ? 44 : 24 — marginalvärden ändras mellan modeller och OS-versioner. Använd alltid system-API:er: safeAreaInsets eller useSafeAreaInsets. Dynamic Island på iPhone 15 Pro har andra marginaler än Notch på iPhone X.

Vanliga frågor

Fungerar SafeAreaView på alla enheter?

SafeAreaView fungerar på iOS 11+ och Android 5+. På äldre enheter kommer marginalerna att vara noll, vilket inte orsakar fel men kan kräva manuell konfiguration. För maximal kompatibilitet, använd react-native-safe-area-context.

Hur använder jag SafeAreaView endast ovanför utan nedre marginal?

Den inbyggda SafeAreaView tillåter inte val av sidor. Använd useSafeAreaInsets från react-native-safe-area-context: hämta insets.top och tillämpa paddingTop. Eller linda SafeAreaView i en View med negativ marginal för att kompensera den nedre marginalen.

Varför lägger inte SafeAreaView till marginaler på Android?

På vissa Android-enheter kan SafeAreaView inte fungera på grund av tillverkarens inställningar. Kontrollera att du använder React Native 0.64+. För garanterad funktion, installera react-native-safe-area-context och linda applikationen i SafeAreaProvider.

Påverkar skärmorientering SafeAreaView?

Ja, vid skärmrotation räknar SafeAreaView om marginalerna. I liggande orientering på iPhone med Notch kan sidomarginalerna vara 0, medan den övre förblir. Komponenten react-native-safe-area-context prenumererar automatiskt på orienteringsförändringar.

Vad är skillnaden mellan SafeAreaView och StatusBar?

SafeAreaView hanterar innehållets marginaler från alla systemelement (statusfält, Notch, hemindikator). StatusBar — komponent för att kontrollera statusfältets färg, stil och synlighet. De löser olika uppgifter och kan användas tillsammans.

Sammanfattning

  • SafeAreaView — React Native-komponent för automatisk hänsyn till systemmarginaler på iOS (Notch, Dynamic Island) och Android (statusfält, navigering)
  • Funktionsprincip — läsning av safeAreaInsets (iOS) eller WindowInsets (Android) och tillämpning som padding på rotbehållaren
  • Notch och Dynamic Island kräver övre marginaler på 44-56 pt, nedre marginal på 34 pt för iPhone-hemindikator
  • react-native-safe-area-context — mer flexibelt alternativ med hooken useSafeAreaInsets för selektiv tillämpning av marginaler
  • Vanliga misstag: dubbla marginaler, hårdkodad padding istället för system-API:er, ignorering av Android-specifikationer
  • Edge-to-edge-skärmar kräver SafeAreaView för korrekt placering av interaktiva element
  • En SafeAreaView per skärm — nästlade omslag skapar dubbla marginaler som förstör layouten

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också