SafeAreaView — co to je, rozvržení s Safe Area v React Native

Autor: IT Sectr Publikováno: 2026-07-06 Doba čtení: 10 min

SafeAreaView — komponenta React Native pro rozvržení s ohledem na bezpečnou oblast obrazovky na zařízeních s výřezy a zaoblením. Na iPhone s Notch a Dynamic Island může být obsah překryt kamerou a indikátory. SafeAreaView automaticky přidává okraje, čímž zabraňuje ořezávání rozhraní systémovými prvky. Více o Safe Area si přečtěte v oficiální dokumentaci Meta.

Hlavní body

  • SafeAreaView — komponenta automaticky přidávající okraje pro bezpečnou oblast obrazovky iOS a Android
  • Notch a Dynamic Island vyžadují horní okraje, které SafeAreaView vypočítává automaticky
  • Android — komponenta zohledňuje stavový řádek a systémová navigační tlačítka
  • Alternativy: useSafeAreaInsets z react-native-safe-area-context pro flexibilní kontrolu okrajů
  • Edge-to-edge displeje vyžadují povinné použití SafeAreaView pro správné rozvržení

Co je SafeAreaView?

SafeAreaView — komponenta React Native, která automaticky přidává vnitřní okraje (padding), aby obsah nebyl překryt systémovými prvky rozhraní: stavovým řádkem, Notch, Dynamic Island a systémovým navigačním panelem. Komponenta se objevila v React Native 0.50 pro iOS a později byla rozšířena pro Android.

Na iOS SafeAreaView používá nativní UIView.safeAreaInsets, který se objevil v iOS 11 (2017). Na Android komponenta zohledňuje WindowInsets — systémové okraje dostupné od Android 5.0 (API 21). Podle údajů Apple (2026) má 92% aktivních iPhone displej s výřezem nebo Dynamic Island.

Proč je Safe Area potřeba

Koncepce Safe Area — součást doporučení Apple HIG (Human Interface Guidelines). Před iPhone X (2017) byl celý prostor obrazovky bezpečný. S příchodem Notch Apple definoval oblasti, kde by se obsah neměl nacházet: výřez kamery, indikátor času a baterie, domovský indikátor. Android zavedl podobnou koncepci s příchodem displejů s výřezem v roce 2018.

Jak Safe Area funguje na iOS a Android

Na iOS SafeAreaView čte safeAreaInsets z nativního layout-guide. Horní okraj zahrnuje výšku stavového řádku (obvykle 44 nebo 50 bodů pro iPhone s Notch). Dolní okraj — 34 bodů pro domovský indikátor (Home Indicator). Android používá WindowInsets — horní okraj pro stavový řádek a dolní pro systémovou navigaci.

PlatformaHorní okrajDolní okrajZdroj
iOS (Notch)44-50 pt34 ptsafeAreaInsets.top / .bottom
iOS (bez Notch)20 pt0 ptsafeAreaInsets.top / .bottom
Android (s výřezem)24-48 dp24-48 dpWindowInsets.systemBarsInsets
Android (bez výřezu)24 dp0 dpWindowInsets.statusBarsInsets

Důležité: SafeAreaView aplikuje padding automaticky, ale pouze pro kořenový kontejner. Vnořené komponenty nezískávají ochranu — každá obrazovka by měla mít vlastní SafeAreaView. Pro modální okna a BottomSheet zohledněte okraje samostatně.

Notch, Dynamic Island a systémové panely

Notch — hardwarový výřez v horní části obrazovky obsahující kameru a senzory. Objevil se v iPhone X (2017). Dynamic Island — softwarově-hardwarová oblast iPhone 14 Pro a novějších, která nahrazuje Notch interaktivním prvkem. Oba vyžadují horní okraj 50-56 pt.

Na Android mají výřezy různé tvary: kapkovitý, otvor v rohu (punch-hole), proužek pod kamerou. SafeAreaView na Android používá WindowInsets, které zohledňují tvar výřezu. Pro aplikace v horizontální orientaci se přidávají boční okraje, aby obsah nebyl překryt systémovými prvky.

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>
);

Přístup Edge-to-edge (Android 15+) doporučuje kreslit obsah pod systémovými panely, ale s ohledem na okraje pro interaktivní prvky. SafeAreaView pomáhá udržet tuto rovnováhu: pozadí se kreslí pod panely, tlačítka a text v bezpečné zóně.

Použití a alternativy SafeAreaView

SafeAreaView — nejjednodušší způsob ochrany obsahu, ale ne vždy flexibilní. Komponenta aplikuje stejné okraje na všechny strany, což je nepohodlné, když je potřeba různý padding pro různé okraje. Například boční okraje mohou být zbytečné a dolní jen pro tlačítko.

Hlavní alternativy: useSafeAreaInsets z react-native-safe-area-context (nejflexibilnější řešení), StatusBar.currentHeight na Android, Platform.OS s ruční kontrolou modelu zařízení. Pro složité případy použijte kombinaci SafeAreaView pro obecný kontejner a useSafeAreaInsets pro jednotlivé prvky.

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

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

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

Knihovna react-native-safe-area-context — de facto standard pro práci s Safe Area v React Native. Je podporována Expo, React Navigation a většinou UI kitů. Poskytuje jak hook, tak komponentu Consumer pro funkční a třídní přístupy.

react-native-safe-area-context pro úplnou kontrolu

react-native-safe-area-context — knihovna poskytující flexibilnější API než vestavěný SafeAreaView. Hlavní výhoda — přístup k jednotlivým hodnotám okrajů (top, bottom, left, right) přes hook useSafeAreaInsets, což umožňuje jejich selektivní aplikaci.

Knihovna také poskytuje SafeAreaProvider — komponentu povinnou na nejvyšší úrovni aplikace. Odebírá změny systémových okrajů při otáčení obrazovky nebo otevření klávesnice. React Navigation tuto knihovnu používá ve výchozím nastavení.

SafeAreaView z react-native-safe-area-context se liší od vestavěného: funguje na více zařízeních a podporuje animaci změny okrajů. Pro nový projekt se doporučuje nainstalovat tuto knihovnu jako závislost a používat její SafeAreaView místo vestavěného.

Typické chyby při práci s SafeAreaView

SafeAreaView je často používán nesprávně. První chyba — obalování každé komponenty do SafeAreaView, což vytváří dvojité okraje. Pravidlo: jeden SafeAreaView na kořenový View obrazovky. Vnořené komponenty dědí okraje přes Flex rozvržení.

Druhá chyba — ignorování Android. Na Android SafeAreaView používá WindowInsets, které se mohou lišit na různých verzích OS. Na Android 15+ mohou být systémové panely průhledné a okraje se mění. Vždy testujte SafeAreaView na reálných zařízeních, nejen v emulátoru.

Třetí chyba — pevně nastavený padding. Nikdy nepoužívejte Platform.OS === 'ios' ? 44 : 24 — hodnoty okrajů se mění mezi modely a verzemi OS. Vždy používejte systémová API: safeAreaInsets nebo useSafeAreaInsets. Dynamic Island na iPhone 15 Pro má jiné okraje než Notch na iPhone X.

Často kladené otázky

Funguje SafeAreaView na všech zařízeních?

SafeAreaView funguje na iOS 11+ a Android 5+. Na starších zařízeních budou okraje nulové, což nezpůsobuje chyby, ale může vyžadovat ruční nastavení. Pro maximální kompatibilitu použijte react-native-safe-area-context.

Jak použít SafeAreaView pouze nahoře bez dolního okraje?

Vestavěný SafeAreaView neumožňuje výběr stran. Použijte useSafeAreaInsets z react-native-safe-area-context: získejte insets.top a aplikujte paddingTop. Nebo obalte SafeAreaView do View se záporným margin pro kompenzaci dolního okraje.

Proč SafeAreaView nepřidává okraje na Android?

Na některých Android zařízeních SafeAreaView nemusí fungovat kvůli nastavením výrobce. Zkontrolujte, že používáte React Native 0.64+. Pro garantovaný provoz nainstalujte react-native-safe-area-context a obalte aplikaci do SafeAreaProvider.

Ovlivňuje orientace obrazovky SafeAreaView?

Ano, při otáčení obrazovky SafeAreaView přepočítává okraje. V horizontální orientaci na iPhone s Notch mohou být boční okraje 0, horní zůstává. Komponenta react-native-safe-area-context se automaticky odebírá změny orientace.

Jaký je rozdíl mezi SafeAreaView a StatusBar?

SafeAreaView spravuje okraje obsahu od všech systémových prvků (stavový řádek, Notch, domovský indikátor). StatusBar — komponenta pro ovládání barvy, stylu a viditelnosti stavového řádku. Řeší různé úkoly a mohou být použity společně.

Shrnutí

  • SafeAreaView — komponenta React Native pro automatické zohlednění systémových okrajů na iOS (Notch, Dynamic Island) a Android (stavový řádek, navigace)
  • Princip fungování — čtení safeAreaInsets (iOS) nebo WindowInsets (Android) a jejich aplikace jako padding na kořenový kontejner
  • Notch a Dynamic Island vyžadují horní okraje 44-56 pt, dolní okraj 34 pt pro domovský indikátor iPhone
  • react-native-safe-area-context — flexibilnější alternativa s hookem useSafeAreaInsets pro selektivní aplikaci okrajů
  • Typické chyby: dvojité okraje, pevně nastavený padding místo systémových API, ignorování specifik Android
  • Edge-to-edge displeje vyžadují SafeAreaView pro správné umístění interaktivních prvků
  • Jeden SafeAreaView na obrazovku — vnořené obaly vytvářejí dvojité okraje, které kazí rozvržení

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také