SafeAreaView — cos’è, layout con Safe Area in React Native

Autore: IT Sectr Pubblicato: 2026-07-06 Tempo di lettura: 10 min

SafeAreaView è un componente React Native per il layout che tiene conto dell’area sicura dello schermo su dispositivi con notch e angoli arrotondati. Su iPhone con Notch e Dynamic Island, il contenuto può essere sovrapposto dalla fotocamera e dagli indicatori. SafeAreaView aggiunge automaticamente padding, impedendo che l’interfaccia venga tagliata dagli elementi di sistema. Scopri di più su Safe Area nella documentazione ufficiale di Meta.

Punti chiave

  • SafeAreaView — un componente che aggiunge automaticamente padding per l’area sicura sugli schermi iOS e Android
  • Notch e Dynamic Island richiedono padding superiore, che SafeAreaView calcola automaticamente
  • Android — il componente tiene conto della barra di stato e dei pulsanti di navigazione di sistema
  • Alternative: useSafeAreaInsets da react-native-safe-area-context per un controllo flessibile del padding
  • Schermi Edge-to-edge richiedono l’uso obbligatorio di SafeAreaView per un layout corretto

Cos’è SafeAreaView?

SafeAreaView è un componente React Native che aggiunge automaticamente padding interno in modo che il contenuto non venga sovrapposto dagli elementi dell’interfaccia di sistema: barra di stato, Notch, Dynamic Island e barra di navigazione di sistema. Il componente è apparso in React Native 0.50 per iOS ed è stato successivamente esteso per Android.

Su iOS, SafeAreaView utilizza UIView.safeAreaInsets nativo, introdotto in iOS 11 (2017). Su Android, il componente tiene conto di WindowInsets — gli insets di sistema disponibili da Android 5.0 (API 21). Secondo Apple (2026), il 92% degli iPhone attivi ha un display con notch o Dynamic Island.

Perché Safe Area è necessario

Il concetto di Safe Area fa parte delle raccomandazioni Apple HIG (Human Interface Guidelines). Prima di iPhone X (2017), l’intero spazio dello schermo era sicuro. Con l’arrivo del Notch, Apple ha definito le aree in cui il contenuto non deve essere posizionato: il ritaglio della fotocamera, l’indicatore di ora e batteria, l’indicatore home. Android ha implementato un concetto simile con l’avvento degli schermi con notch nel 2018.

Come funziona Safe Area su iOS e Android

Su iOS, SafeAreaView legge safeAreaInsets dalla guida al layout nativa. L’inset superiore include l’altezza della barra di stato (solitamente 44 o 50 punti per iPhone con Notch). L’inset inferiore è di 34 punti per l’indicatore home. Android utilizza WindowInsets — inset superiore per la barra di stato e inferiore per la navigazione di sistema.

PiattaformaInset superioreInset inferioreFonte
iOS (Notch)44-50 pt34 ptsafeAreaInsets.top / .bottom
iOS (senza Notch)20 pt0 ptsafeAreaInsets.top / .bottom
Android (con ritaglio)24-48 dp24-48 dpWindowInsets.systemBarsInsets
Android (senza ritaglio)24 dp0 dpWindowInsets.statusBarsInsets

Importante: SafeAreaView applica automaticamente il padding, ma solo per il contenitore radice. I componenti annidati non ricevono protezione — ogni schermo deve avere il proprio SafeAreaView. Per finestre modali e BottomSheet, considera gli insets separatamente.

Notch, Dynamic Island e barre di sistema

Notch è un ritaglio hardware nella parte superiore dello schermo che contiene fotocamera e sensori. È apparso su iPhone X (2017). Dynamic Island è un’area software-hardware di iPhone 14 Pro e successivi, che sostituisce il Notch con un elemento interattivo. Entrambi richiedono un inset superiore di 50-56 pt.

Su Android, i ritagli hanno forme diverse: a goccia, punch-hole, striscia sotto la fotocamera. SafeAreaView su Android utilizza WindowInsets, che tengono conto della forma del ritaglio. Per le app in orientamento orizzontale, vengono aggiunti insets laterali per evitare che il contenuto si sovrapponga agli elementi di sistema.

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

L’approccio Edge-to-edge (Android 15+) raccomanda di disegnare il contenuto sotto le barre di sistema, ma tenendo conto degli insets per gli elementi interattivi. SafeAreaView aiuta a mantenere questo equilibrio: lo sfondo viene disegnato sotto le barre, mentre pulsanti e testo rimangono nella zona sicura.

Uso e alternative a SafeAreaView

SafeAreaView è il modo più semplice per proteggere il contenuto, ma non sempre flessibile. Il componente applica lo stesso padding su tutti i lati, il che è scomodo quando serve un padding diverso per bordi diversi. Ad esempio, il padding laterale può essere inutile, mentre il padding inferiore può essere necessario solo per un pulsante.

Le principali alternative: useSafeAreaInsets da react-native-safe-area-context (soluzione più flessibile), StatusBar.currentHeight su Android, Platform.OS con controllo manuale del modello del dispositivo. Per casi complessi, usa una combinazione di SafeAreaView per il contenitore generale e useSafeAreaInsets per i singoli elementi.

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

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

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

La libreria react-native-safe-area-context è lo standard de facto per lavorare con Safe Area in React Native. È supportata da Expo, React Navigation e dalla maggior parte dei kit UI. Fornisce sia un hook che un componente Consumer per approcci funzionali e basati su classi.

react-native-safe-area-context per il controllo totale

react-native-safe-area-context è una libreria che fornisce un’API più flessibile rispetto a SafeAreaView integrato. Il vantaggio principale è l’accesso ai singoli valori degli insets (top, bottom, left, right) tramite l’hook useSafeAreaInsets, consentendo l’applicazione selettiva degli insets.

La libreria fornisce anche SafeAreaProvider — un componente obbligatorio al livello superiore dell’applicazione. Si iscrive ai cambiamenti degli insets di sistema durante la rotazione dello schermo o l’apertura della tastiera. React Navigation utilizza questa libreria per impostazione predefinita.

SafeAreaView da react-native-safe-area-context differisce da quello integrato: funziona su più dispositivi e supporta l’animazione dei cambiamenti degli insets. Per i nuovi progetti, si consiglia di installare questa libreria come dipendenza e utilizzare il suo SafeAreaView invece di quello integrato.

Errori comuni con SafeAreaView

SafeAreaView viene spesso usato in modo errato. Il primo errore è avvolgere ogni componente in SafeAreaView, creando un doppio padding. La regola: un SafeAreaView per View radice dello schermo. I componenti annidati ereditano gli insets attraverso il layout Flex.

Il secondo errore è ignorare Android. Su Android, SafeAreaView utilizza WindowInsets, che possono differire tra versioni del sistema operativo. Su Android 15+, le barre di sistema possono essere trasparenti e gli insets cambiano. Testa sempre SafeAreaView su dispositivi reali, non solo nell’emulatore.

Il terzo errore è il padding hardcoded. Non usare mai Platform.OS === 'ios' ? 44 : 24 — i valori degli insets variano tra modelli e versioni del sistema operativo. Usa sempre le API di sistema: safeAreaInsets o useSafeAreaInsets. Dynamic Island su iPhone 15 Pro ha insets diversi rispetto al Notch su iPhone X.

Domande frequenti

SafeAreaView funziona su tutti i dispositivi?

SafeAreaView funziona su iOS 11+ e Android 5+. Su dispositivi più vecchi, gli insets saranno zero, il che non causa errori ma potrebbe richiedere regolazioni manuali. Per la massima compatibilità, usa react-native-safe-area-context.

Come usare SafeAreaView solo in alto, senza padding inferiore?

SafeAreaView integrato non permette di selezionare i lati. Usa useSafeAreaInsets da react-native-safe-area-context: ottieni insets.top e applica paddingTop. Oppure avvolgi SafeAreaView in una View con margine negativo per compensare l’inset inferiore.

Perché SafeAreaView non aggiunge padding su Android?

Su alcuni dispositivi Android, SafeAreaView potrebbe non funzionare a causa delle impostazioni del produttore. Assicurati di utilizzare React Native 0.64+. Per un funzionamento garantito, installa react-native-safe-area-context e avvolgi l’app in SafeAreaProvider.

L’orientamento dello schermo influisce su SafeAreaView?

Sì, ruotando lo schermo, SafeAreaView ricalcola gli insets. In orientamento orizzontale su iPhone con Notch, gli insets laterali possono essere 0, mentre l’inset superiore rimane. Il componente react-native-safe-area-context si iscrive automaticamente ai cambiamenti di orientamento.

Qual è la differenza tra SafeAreaView e StatusBar?

SafeAreaView gestisce gli insets del contenuto da tutti gli elementi di sistema (barra di stato, Notch, indicatore home). StatusBar è un componente per controllare il colore, lo stile e la visibilità della barra di stato. Risolvono compiti diversi e possono essere usati insieme.

Riepilogo

  • SafeAreaView — un componente React Native per il calcolo automatico degli insets di sistema su iOS (Notch, Dynamic Island) e Android (barra di stato, navigazione)
  • Come funziona — legge safeAreaInsets (iOS) o WindowInsets (Android) e li applica come padding al contenitore radice
  • Notch e Dynamic Island richiedono insets superiori di 44-56 pt, inset inferiore di 34 pt per l’indicatore home di iPhone
  • react-native-safe-area-context — un’alternativa più flessibile con l’hook useSafeAreaInsets per l’applicazione selettiva degli insets
  • Errori comuni: doppio padding, padding hardcoded invece delle API di sistema, ignorare le specificità di Android
  • Schermi Edge-to-edge richiedono SafeAreaView per il corretto posizionamento degli elementi interattivi
  • Un SafeAreaView per schermo — gli involucri annidati creano doppio padding che rompe il layout

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche