SafeAreaView es un componente de React Native para diseño que tiene en cuenta el área segura de la pantalla en dispositivos con muescas y esquinas redondeadas. En iPhones con Notch y Dynamic Island, el contenido puede superponerse con la cámara y los indicadores. SafeAreaView agrega automáticamente relleno, evitando que la interfaz sea recortada por los elementos del sistema. Más información sobre Safe Area en la documentación oficial de Meta.
Puntos clave
SafeAreaView es un componente de React Native que agrega automáticamente relleno interno para que el contenido no se superponga con los elementos del sistema: barra de estado, Notch, Dynamic Island y barra de navegación del sistema. El componente apareció en React Native 0.50 para iOS y luego se extendió para Android.
En iOS, SafeAreaView utiliza UIView.safeAreaInsets nativo, introducido en iOS 11 (2017). En Android, el componente tiene en cuenta WindowInsets — los insets del sistema disponibles desde Android 5.0 (API 21). Según Apple (2026), el 92% de los iPhones activos tienen una pantalla con muesca o Dynamic Island.
El concepto de Safe Area es parte de las recomendaciones de Apple HIG (Human Interface Guidelines). Antes del iPhone X (2017), todo el espacio de la pantalla era seguro. Con la llegada del Notch, Apple definió las áreas donde el contenido no debe colocarse: el recorte de la cámara, el indicador de hora y batería, el indicador de inicio. Android implementó un concepto similar con la aparición de pantallas con muesca en 2018.
En iOS, SafeAreaView lee safeAreaInsets de la guía de diseño nativa. El inset superior incluye la altura de la barra de estado (generalmente 44 o 50 puntos para iPhones con Notch). El inset inferior es de 34 puntos para el indicador de inicio. Android utiliza WindowInsets — inset superior para la barra de estado e inferior para la navegación del sistema.
| Plataforma | Inset superior | Inset inferior | Fuente |
|---|---|---|---|
| iOS (Notch) | 44-50 pt | 34 pt | safeAreaInsets.top / .bottom |
| iOS (sin Notch) | 20 pt | 0 pt | safeAreaInsets.top / .bottom |
| Android (con recorte) | 24-48 dp | 24-48 dp | WindowInsets.systemBarsInsets |
| Android (sin recorte) | 24 dp | 0 dp | WindowInsets.statusBarsInsets |
Importante: SafeAreaView aplica el relleno automáticamente, pero solo para el contenedor raíz. Los componentes anidados no reciben protección — cada pantalla debe tener su propio SafeAreaView. Para ventanas modales y BottomSheet, tenga en cuenta los insets por separado.
Notch es un recorte de hardware en la parte superior de la pantalla que contiene la cámara y los sensores. Apareció en el iPhone X (2017). Dynamic Island es un área de software-hardware del iPhone 14 Pro y posteriores, que reemplaza el Notch con un elemento interactivo. Ambos requieren un inset superior de 50-56 pt.
En Android, los recortes tienen diferentes formas: lágrima, punch-hole, tira debajo de la cámara. SafeAreaView en Android utiliza WindowInsets, que tienen en cuenta la forma del recorte. Para aplicaciones en orientación horizontal, se agregan insets laterales para evitar que el contenido se superponga a los elementos del sistema.
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>
);El enfoque Edge-to-edge (Android 15+) recomienda dibujar contenido debajo de los paneles del sistema, pero teniendo en cuenta los insets para los elementos interactivos. SafeAreaView ayuda a mantener este equilibrio: el fondo se dibuja debajo de los paneles, mientras que los botones y el texto permanecen en la zona segura.
SafeAreaView es la forma más sencilla de proteger el contenido, pero no siempre es flexible. El componente aplica el mismo relleno a todos los lados, lo que resulta incómodo cuando se necesita un relleno diferente para diferentes bordes. Por ejemplo, el relleno lateral puede ser innecesario, mientras que el relleno inferior puede ser necesario solo para un botón.
Las principales alternativas: useSafeAreaInsets de react-native-safe-area-context (solución más flexible), StatusBar.currentHeight en Android, Platform.OS con verificación manual del modelo de dispositivo. Para casos complejos, use una combinación de SafeAreaView para el contenedor general y useSafeAreaInsets para elementos individuales.
import { useSafeAreaInsets } from 'react-native-safe-area-context';
const CustomHeader = () => {
const insets = useSafeAreaInsets();
return (
<View style={{ paddingTop: insets.top }}>
<Header />
</View>
);
};La biblioteca react-native-safe-area-context es el estándar de facto para trabajar con Safe Area en React Native. Es compatible con Expo, React Navigation y la mayoría de los kits de UI. Proporciona tanto un hook como un componente Consumer para enfoques funcionales y basados en clases.
react-native-safe-area-context es una biblioteca que proporciona una API más flexible que SafeAreaView incorporado. La principal ventaja es el acceso a valores individuales de insets (top, bottom, left, right) a través del hook useSafeAreaInsets, lo que permite la aplicación selectiva de insets.
La biblioteca también proporciona SafeAreaProvider — un componente requerido en el nivel superior de la aplicación. Se suscribe a los cambios de insets del sistema al rotar la pantalla o abrir el teclado. React Navigation utiliza esta biblioteca por defecto.
SafeAreaView de react-native-safe-area-context difiere del incorporado: funciona en más dispositivos y admite animación de cambio de insets. Para proyectos nuevos, se recomienda instalar esta biblioteca como dependencia y usar su SafeAreaView en lugar del incorporado.
SafeAreaView a menudo se usa incorrectamente. El primer error es envolver cada componente en SafeAreaView, lo que crea doble relleno. La regla: un SafeAreaView por View raíz de la pantalla. Los componentes anidados heredan los insets a través del diseño Flex.
El segundo error es ignorar Android. En Android, SafeAreaView utiliza WindowInsets, que pueden diferir entre versiones del SO. En Android 15+, los paneles del sistema pueden ser transparentes y los insets cambian. Pruebe siempre SafeAreaView en dispositivos reales, no solo en el emulador.
El tercer error es el relleno codificado. Nunca use Platform.OS === 'ios' ? 44 : 24 — los valores de insets varían entre modelos y versiones del SO. Use siempre las API del sistema: safeAreaInsets o useSafeAreaInsets. Dynamic Island en iPhone 15 Pro tiene insets diferentes que el Notch en iPhone X.
Preguntas frecuentes
SafeAreaView funciona en iOS 11+ y Android 5+. En dispositivos más antiguos, los insets serán cero, lo que no causa errores pero puede requerir ajuste manual. Para máxima compatibilidad, use react-native-safe-area-context.
SafeAreaView incorporado no permite seleccionar lados. Use useSafeAreaInsets de react-native-safe-area-context: obtenga insets.top y aplique paddingTop. O envuelva SafeAreaView en un View con margen negativo para compensar el inset inferior.
En algunos dispositivos Android, SafeAreaView puede no funcionar debido a la configuración del fabricante. Asegúrese de usar React Native 0.64+. Para un funcionamiento garantizado, instale react-native-safe-area-context y envuelva la aplicación en SafeAreaProvider.
Sí, al rotar la pantalla, SafeAreaView recalcula los insets. En orientación horizontal en iPhones con Notch, los insets laterales pueden ser 0, mientras que el inset superior permanece. El componente react-native-safe-area-context se suscribe automáticamente a los cambios de orientación.
SafeAreaView gestiona los insets de contenido de todos los elementos del sistema (barra de estado, Notch, indicador de inicio). StatusBar es un componente para controlar el color, estilo y visibilidad de la barra de estado. Resuelven diferentes tareas y pueden usarse juntos.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también