React Native 0.86 (Expo SDK 57) habilita edge-to-edge en Android por defecto - tu aplicación se dibuja detrás de las barras de estado y navegación, alineándose con las directrices de Android 15. Este cookbook cubre los valores por defecto de RN, expo-status-bar, expo-navigation-bar, y los patrones de inset que mantienen los botones tappable.
RN 0.86 opt-in en edge-to-edge a nivel nativo de actividad/ventana - la ventana se extiende bajo las barras del sistema.
Insets de react-native-safe-area-context reportan cuánto de la pantalla está oscurecido por la barra de estado, muesca de pantalla y barra de navegación (gesto o 3-botón).
expo-status-bar establece el color del icono/texto (light | dark | auto) - no reemplaza el padding de inset.
expo-navigation-bar controla el fondo de la barra de navegación de Android, estilo de botón, visibilidad y posición (relative vs absolute).
Teclado la prevención es separada - KeyboardAvoidingView / react-native-keyboard-controller aún aplican; inset inferior y teclado pueden apilar.
La mayoría de plantillas de Expo SDK 57 habilitan edge-to-edge vía prebuild. Si mantienes un fork android/ bare:
// app.config.ts - prefiere config sobre editar MainActivity manualmenteexport default { expo: { android: { // La plantilla RN 0.86 establece edge-to-edge; confirma después de prebuild }, plugins: [ [ "expo-build-properties", { android: { // compileSdk / targetSdk 35 para el comportamiento más reciente de la barra compileSdkVersion: 35, targetSdkVersion: 35, }, }, ], ], },};
Inspecciona android/app/src/main/res/values/styles.xml después de prebuild - windowLayoutInDisplayCutoutMode y colores de barra de estado/navegación transparentes deben estar presentes en la plantilla RN 0.86.
Padding SafeAreaView y insets.top manual juntos - duplica el espacio superior. Solución: Un propietario por eje.
Iconos de barra de estado blanco sobre header blanco - StatusBar style="light" sobre fondo claro. Solución: Empareja style con luminancia de fondo por pantalla.
La barra de pestañas superpone el indicador home - Las pestañas de React Navigation pueden necesitar ajuste de safeAreaInsets. Solución: Pasa tabBarStyle: { height: 56 + insets.bottom } o usa valores por defecto de biblioteca en SDK 57.
Prueba solo en navegación 3-botón - La navegación por gesto cambia la altura del inset inferior. Solución: Alterna Configuración → Navegación del sistema en emulador.
Color de barra de navegación opaco peleando contra transparencia - Algunos skins OEM ignoran alpha. Solución:setPositionAsync("absolute") + reaplicar en foco.
Asumiendo que expo-status-bar añade padding - Solo estiliza iconos. Solución: Siempre empareja con react-native-safe-area-context.
Es el valor por defecto en la plantilla RN 0.86 de Android. Deshabilitarlo requiere cambios de tema nativo y lucha contra la dirección de la plataforma.
Prefiere aprender patrones de inset sobre optar por no participar.
¿Necesito expo-navigation-bar si solo uso SafeAreaView?
SafeAreaView maneja el padding de layout; expo-navigation-bar maneja el color de la barra de navegación y el contraste de botones.
Las barras de navegación transparentes usualmente necesitan ambas.
¿Por qué mi contenido salta cuando se abre el teclado?
Teclado y área segura son independientes. Combina KeyboardAvoidingView con inset inferior en la misma pantalla cuidadosamente - evita double bottom padding.
¿Afecta edge-to-edge a iOS?
iOS siempre ha usado áreas seguras para muescas. Android ahora se comporta de manera similar - SafeAreaProvider multiplataforma ayuda a ambas.
¿Cómo pruebo el contraste del icono de la barra de estado?
Alterna fondos hero light/dark en Storybook o una pantalla del menú dev.
Ejecuta en Samsung/Pixel físico - el tinted OEM difiere de AVD.
¿Pueden las pestañas de Expo Router manejar insets automáticamente?
Versiones recientes de @react-navigation/bottom-tabs respetan áreas seguras, pero barras de pestañas personalizadas necesitan insets.bottom manual.
¿Qué pasa con Android 15 edge-to-edge forzado?
Dirigirse a API 35 se alinea con las expectativas de la plataforma. La plantilla RN 0.86 está adelantada de la curva de política - aún prueba en API 35.
¿Cómo depuro valores de inset?
Registra useSafeAreaInsets() en compilaciones dev.
Compara emulador vs dispositivo - los insets de navegación por gesto difieren (~24-48dp).
¿Afecta el tema de la barra de navegación solo a la píldora de gesto?
setButtonStyleAsync afecta modos 3-botón y gesto; el color de fondo afecta el área de la barra detrás de la píldora.
¿Dónde está el análisis profundo de layout para áreas seguras?