SafeAreaView — componentă React Native pentru aspect care ține cont de zona sigură a ecranului pe dispozitive cu decupaje și rotunjiri. Pe iPhone cu Notch și Dynamic Island conținutul poate fi acoperit de cameră și indicatori. SafeAreaView adaugă automat margini, prevenind tăierea interfeței de elementele de sistem. Citiți mai multe despre Safe Area în documentația oficială Meta.
Principalele
SafeAreaView — componentă React Native care adaugă automat margini interioare (padding) pentru ca conținutul să nu fie acoperit de elementele de sistem ale interfeței: bara de stare, Notch, Dynamic Island și panoul de navigare al sistemului. Componenta a apărut în React Native 0.50 pentru iOS și mai târziu a fost extinsă pentru Android.
Pe iOS, SafeAreaView utilizează UIView.safeAreaInsets nativ, apărut în iOS 11 (2017). Pe Android, componenta ține cont de WindowInsets — margini de sistem disponibile din Android 5.0 (API 21). Conform datelor Apple (2026), 92% din iPhone-urile active au ecran cu decupaj sau Dynamic Island.
Conceptul Safe Area — parte din recomandările Apple HIG (Human Interface Guidelines). Înainte de iPhone X (2017) întregul spațiu al ecranului era sigur. Odată cu apariția Notch, Apple a definit zonele în care conținutul nu ar trebui să fie amplasat: decupajul camerei, indicatorul de timp și baterie, indicatorul de acasă. Android a introdus un concept similar odată cu apariția ecranelor cu decupaj în 2018.
Pe iOS SafeAreaView citește safeAreaInsets din layout-guide nativ. Marginea superioară include înălțimea barei de stare (de obicei 44 sau 50 de puncte pentru iPhone cu Notch). Marginea inferioară — 34 de puncte pentru indicatorul de acasă (Home Indicator). Android utilizează WindowInsets — marginea superioară pentru bara de stare și cea inferioară pentru navigarea de sistem.
| Platformă | Margine superioară | Margine inferioară | Sursă |
|---|---|---|---|
| iOS (Notch) | 44-50 pt | 34 pt | safeAreaInsets.top / .bottom |
| iOS (fără Notch) | 20 pt | 0 pt | safeAreaInsets.top / .bottom |
| Android (cu decupaj) | 24-48 dp | 24-48 dp | WindowInsets.systemBarsInsets |
| Android (fără decupaj) | 24 dp | 0 dp | WindowInsets.statusBarsInsets |
Important: SafeAreaView aplică padding automat, dar numai pentru containerul rădăcină. Componentele imbricate nu primesc protecție — fiecare ecran trebuie să aibă propriul SafeAreaView. Pentru ferestre modale și BottomSheet, luați în considerare marginile separat.
Notch — decupaj hardware în partea superioară a ecranului care conține camera și senzorii. A apărut în iPhone X (2017). Dynamic Island — zonă software-hardware a iPhone 14 Pro și mai noi care înlocuiește Notch cu un element interactiv. Ambele necesită o margine superioară de 50-56 pt.
Pe Android, decupajele au forme diferite: în formă de lacrimă, gaură în colț (punch-hole), bandă sub cameră. SafeAreaView pe Android utilizează WindowInsets care țin cont de forma decupajului. Pentru aplicațiile în orientare peisaj, se adaugă margini laterale pentru ca conținutul să nu fie acoperit de elementele de sistem.
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>
);Abordarea Edge-to-edge (Android 15+) recomandă desenarea conținutului sub panourile de sistem, dar cu luarea în considerare a marginilor pentru elementele interactive. SafeAreaView ajută la menținerea acestui echilibru: fundalul se desenează sub panouri, iar butoanele și textul — în zona sigură.
SafeAreaView — cel mai simplu mod de a proteja conținutul, dar nu întotdeauna flexibil. Componenta aplică aceleași margini tuturor părților, ceea ce este incomod când este nevoie de padding diferit pentru margini diferite. De exemplu, marginile laterale pot fi inutile, iar cea inferioară — doar pentru un buton.
Principalele alternative: useSafeAreaInsets din react-native-safe-area-context (cea mai flexibilă soluție), StatusBar.currentHeight pe Android, Platform.OS cu verificare manuală a modelului dispozitivului. Pentru cazuri complexe, utilizați combinația SafeAreaView pentru containerul general și useSafeAreaInsets pentru elemente individuale.
import { useSafeAreaInsets } from 'react-native-safe-area-context';
const CustomHeader = () => {
const insets = useSafeAreaInsets();
return (
<View style={{ paddingTop: insets.top }}>
<Header />
</View>
);
};Biblioteca react-native-safe-area-context — standardul de facto pentru lucrul cu Safe Area în React Native. Este suportată de Expo, React Navigation și majoritatea kit-urilor UI. Oferă atât hook, cât și componentă Consumer pentru abordări funcționale și de clasă.
react-native-safe-area-context — bibliotecă care oferă o API mai flexibilă decât SafeAreaView încorporat. Principalul avantaj — accesul la valori individuale ale marginilor (top, bottom, left, right) prin hook-ul useSafeAreaInsets, ceea ce permite aplicarea lor selectivă.
Biblioteca oferă, de asemenea, SafeAreaProvider — o componentă obligatorie la nivelul superior al aplicației. Aceasta se abonează la modificările marginilor de sistem la rotirea ecranului sau deschiderea tastaturii. React Navigation utilizează această bibliotecă în mod implicit.
SafeAreaView din react-native-safe-area-context diferă de cel încorporat: funcționează pe mai multe dispozitive și suportă animația modificării marginilor. Pentru un proiect nou, se recomandă instalarea acestei biblioteci ca dependență și utilizarea SafeAreaView-ului său în locul celui încorporat.
SafeAreaView este adesea utilizat incorect. Prima eroare — înfășurarea fiecărei componente în SafeAreaView, ceea ce creează margini duble. Regula: un SafeAreaView pe View-ul rădăcină al ecranului. Componentele imbricate moștenesc marginile prin aspectul Flex.
A doua eroare — ignorarea Android. Pe Android SafeAreaView utilizează WindowInsets, care pot diferi pe diferite versiuni de sistem. Pe Android 15+ panourile de sistem pot fi transparente, iar marginile se modifică. Testați întotdeauna SafeAreaView pe dispozitive reale, nu doar în emulator.
A treia eroare — padding-uri fixate rigid. Nu utilizați niciodată Platform.OS === 'ios' ? 44 : 24 — valorile marginilor se modifică între modele și versiuni de sistem. Utilizați întotdeauna API-urile de sistem: safeAreaInsets sau useSafeAreaInsets. Dynamic Island pe iPhone 15 Pro are margini diferite față de Notch pe iPhone X.
Întrebări frecvente
SafeAreaView funcționează pe iOS 11+ și Android 5+. Pe dispozitive mai vechi, marginile vor fi zero, ceea ce nu provoacă erori, dar poate necesita configurare manuală. Pentru compatibilitate maximă, utilizați react-native-safe-area-context.
SafeAreaView încorporat nu permite selectarea părților. Utilizați useSafeAreaInsets din react-native-safe-area-context: obțineți insets.top și aplicați paddingTop. Sau înfășurați SafeAreaView într-un View cu margine negativă pentru a compensa marginea inferioară.
Pe unele dispozitive Android, SafeAreaView poate să nu funcționeze din cauza setărilor producătorului. Verificați că utilizați React Native 0.64+. Pentru funcționare garantată, instalați react-native-safe-area-context și înfășurați aplicația în SafeAreaProvider.
Da, la rotirea ecranului SafeAreaView recalculează marginile. În orientarea peisaj pe iPhone cu Notch, marginile laterale pot fi 0, iar cea superioară rămâne. Componenta react-native-safe-area-context se abonează automat la modificările de orientare.
SafeAreaView gestionează marginile conținutului față de toate elementele de sistem (bară de stare, Notch, indicator de acasă). StatusBar — componentă pentru controlul culorii, stilului și vizibilității barei de stare. Rezolvă sarcini diferite și pot fi utilizate împreună.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și