Saltar al contenido principal
Capgo logo
Móvil Guías

Pantalla de bienvenida en React Native: Una guía completa para 2026

Aprende a implementar una pantalla de bienvenida profesional en React Native para Expo y CLI. Esta guía cubre la preparación de activos, la configuración nativa, el rendimiento y las soluciones comunes.

Pantalla de bienvenida en React Native: Una guía completa para 2026

Al tocar el icono de tu aplicación en un dispositivo real, por un instante el usuario ve una luz blanca, un logo estirado o una pantalla de arranque congelada que desaparece antes de que algo útil esté listo. Eso es el momento en que una aplicación de React Native deja de sentirse de producción.

Una buena pantalla de arranque en React Native arregla más que la marca. Cubre la brecha entre el arranque nativo y el primer frame renderizado por React que tiene sentido. También te fuerza a pensar con claridad sobre el orden de arranque, la preparación de activos y la diferencia entre lo que sucede en Expo Go, un cliente de desarrollo, y una construcción de tienda real. Si no logras ese timing, los usuarios ven las grietas de inmediato.

Contenido de la Página

Why a Professional Splash Screen Matters

Un usuario toca tu aplicación desde la pantalla de inicio, y la secuencia de arranque muestra una ventana blanca vacía antes de que la primera interfaz aparece. En producción, eso se lee como inestabilidad. No importa que React Native esté cargando el paquete de JavaScript o restaurando el estado en segundo plano. La primera impresión ya está equivocada.

En React Native, la pantalla de bienvenida es la primera superficie nativa que tu aplicación controla. Cubre la transición entre el inicio del proceso y el primer marco renderizado por React. Eso la convierte en una herramienta de arranque, no solo en un activo de marca. Si la sincronizas bien, los usuarios ven un arranque estable que parece intencional. Si la ocultas demasiado pronto, ven cambios de diseño, fuentes faltantes o una pantalla muerta mientras la autenticación, la navegación o la configuración remota se recuperan.

Un hombre con una expresión preocupada mirando una pantalla blanca vacía en su teléfono inteligente.

What the splash screen is actually doing

A production splash screen usually needs to handle four startup concerns:

  • Cubrir el trabajo de arranque nativo a JS: carga de fuentes, restauración de sesión persistente, lecturas de banderas de características y estado de navegación inicial compiten por el primer frame.
  • Prevenir problemas visuales: evita destellos de blanco del sistema, texto sin estilo o una vista de raíz parcialmente montada.
  • Considere mantener la apariencia visual consistente: the background color and logo can match your app shell so the transition feels controlled.
  • Forzar decisiones de inicio: Los equipos deben definir qué significa “listo” antes de eliminar la pantalla de inicio.

Regla práctica: Hide the splash when the first real screen can render cleanly, not after an arbitrary delay.

This is also where the Expo-managed and bare CLI workflows start to diverge. In Expo-managed projects, splash setup is mostly declarative, and the main engineering decision is when to call the hide API based on app readiness. In bare React Native CLI projects, you own more native setup on Android and iOS, which gives you more control but also more ways to introduce launch flicker, theme mismatches, or platform-specific regressions.

Esta decisión importa en proyectos reales. Expo es más rápido de configurar y más fácil de mantener consistente en diferentes entornos. Los proyectos bare suelen ser la elección correcta cuando la aplicación ya depende de módulos nativos personalizados, comportamiento de inicio personalizado o control más estricto sobre el camino de inicio.

Los equipos que tratan la pantalla de inicio como parte de la calidad del producto suelen revisarla junto con el trabajo de UX más amplio, no como una tarea nativa aislada. Eso es el mismo enfoque cubierto en Capgo’s guide to app user experienceSi también está evaluando la pila de React Native más amplia para una nueva aplicación o migración, Nerdify solutions for React Native apps ofrece una visión general enfocada en la producción.

Preparing Perfect Splash Screen Assets

Most splash screen bugs start in design files, not code. If the base asset is wrong, no amount of Android XML or iOS storyboard cleanup will save it.

El enfoque más seguro es tratar la pantalla de inicio como un sistema de diseño, no una sola imagen de pantalla completa. Utilice un color de fondo junto con un logo o ilustración centrada. Eso se escala de manera más predictiva en dispositivos Android altos, iPhones, tabletas y orientaciones de dispositivo más anchas que intentar ajustar una imagen de cartelera detallada en todos los lugares.

Una lista de verificación que muestra cuatro requisitos esenciales para diseñar perfectos activos de pantalla de arranque móvil.

¿Qué preparar antes de codificar?

Comience con un archivo fuente limpio desde el diseño. El vector es ideal para la entrega, incluso si el activo de lanzamiento exportado es un PNG.

Utilice esta lista de verificación:

  • Artículo de origen: Mantenga un logo o marca maestro en SVG, AI o otro formato de fuente editable para que las exportaciones sean consistentes.
  • Color de fondo: Define the exact splash background color up front and make sure it matches the first screen or app shell background.
  • Márgenes seguros: Deja suficiente espacio vacío alrededor del logo para que la recorte agresivo en aspectos de pantalla inusuales no corte en el diseño.
  • Variantes de plataforma: Exporta las tamaños de imagen que necesite tu flujo de trabajo, en lugar de estirar un archivo en todas partes.
  • Revisión de modo oscuro: Si tu aplicación admite superficies oscuras, confirma que el logo sigue leyéndose claramente contra el fondo elegido.

La guía de Expo es útil aquí porque refuerza que los activos de lanzamiento ahora forman parte del pipeline de construcción, no un después de pensamiento. Sus documentos recomiendan un cuadrado de 1024×1024 PNG para iconos de aplicación y nota que EAS Build puede generar los tamaños requeridos para proyectos creados con npx create-expo-appque muestra cómo la generación de activos ha movido a herramientas modernas en lugar de la repetición manual.

Errores comunes de activos

Los errores visuales más comunes son predecibles:

Problema Causa probable Enfoque mejorado
Logo borroso Exported from a low-resolution raster Re-exportar desde una fuente vectorial
Ángulos recortados El arte se colocó demasiado cerca de los límites Aumentar el espacio de seguridad
Estirar Full-screen image forced into many aspect ratios Usar color de fondo más imagen centrada
Transición desajustada El fondo de pantalla difiere de la primera pantalla Align launch and app shell colors

Una imagen de bienvenida no debe contener texto denso, detalles pequeños o publicidad. Las pantallas de inicio se muestran brevemente y se renderizan bajo estrictas restricciones nativas.

For teams shipping frequent visual updates, image discipline matters beyond launch. The same habits apply to delivery bundles and binary size, which is why guides like optimizar imágenes para actualizaciones are worth reviewing when you standardize asset exports.

Un flujo de trabajo de exportación práctico

Una configuración que funciona bien en proyectos reales se parece a esto:

  1. Diseñar una composición centrada en un fondo plano.
  2. Exportar un logo PNG transparente. si tu flujo de trabajo admite un color de fondo separado.
  3. Mantén la consistencia en los nombres. para que los intercambios de activos no sean adivinanzas.
  4. Prueba en simuladores pequeños y altos temprano. antes de conectar la vida cíclica del splash.
  5. Reconstruye después de cambios en activos. because launch resources often sit in native caches.

That last point matters more than people expect. Many splash screen issues that look like configuration bugs are just stale native assets.

Implementar con el flujo de trabajo del cliente de desarrollo y Expo Go.

Si estás utilizando Expo, comienza con expo-splash-screenEncaja con el flujo de trabajo gestionado, mantiene la mayoría de la configuración declarativa y le da un control explícito sobre cuándo el splash debe desaparecer.

Captura de pantalla desde https://reactnative.dev/

El comportamiento clave para comprender es simple. Keep the native splash visible until the first meaningful UI frame is ready. Expo's SplashScreen API admite exactamente ese patrón con preventAutoHideAsync() al iniciar hideAsync() Una vez que la carga crítica ha terminado, y Expo advierte que ocultar demasiado pronto puede exponer brevemente una pantalla en blanco en ambas versiones de iOS y Android, como se documenta en el Pantalla de bienvenida de Expo API.

Configure the native splash declaratively

En un proyecto de Expo, el lado visual suele vivir en app.json o app.config.js.

A una típica app.json setup parece así:

{
  "expo": {
    "plugins": [
      [
        "expo-splash-screen",
        {
          "backgroundColor": "#111111",
          "image": "./assets/splash-icon.png",
          "imageWidth": 200
        }
      ]
    ]
  }
}

The exact fields can vary by project setup, but the pattern stays the same. You define the native launch appearance in config, then control visibility from JavaScript.

A un par de opciones prácticas importan aquí:

  • Utiliza un color de fondo cercano a tu pantalla inicial para que la transición se sienta continua.
  • Mantén la imagen simple because launch surfaces aren’t the place for dense artwork.
  • Evita los retrasos falsos de "marca" Mantienen a los usuarios en una logo cuando la aplicación ya está lista.

Hide the splash based on readiness, not time

Muchas tutoriales a menudo se desvían del curso. Utilizan setTimeout, que es fácil de demostrar pero incorrecto para la producción.

Usa el estado de arranque en lugar de eso. Un patrón común en nivel raíz se parece a esto:

import { useCallback, useEffect, useState } from 'react';
import { View } from 'react-native';
import * as SplashScreen from 'expo-splash-screen';

SplashScreen.preventAutoHideAsync();

export default function App() {
  const [isReady, setIsReady] = useState(false);

  useEffect(() => {
    async function prepare() {
      try {
        // Load fonts
        // Restore auth state
        // Read persisted settings
      } finally {
        setIsReady(true);
      }
    }

    prepare();
  }, []);

  const onLayoutRootView = useCallback(async () => {
    if (isReady) {
      await SplashScreen.hideAsync();
    }
  }, [isReady]);

  if (!isReady) {
    return null;
  }

  return (
    <View style={{ flex: 1 }} onLayout={onLayoutRootView}>
      {/* Your real app UI */}
    </View>
  );
}

Dos detalles hacen que este patrón sea confiable.

Primero, preventAutoHideAsync() is called before the app starts rendering meaningful UI. Second, the hide happens only after the root view is ready to lay out, which reduces the chance of a flash between the native splash and the React tree.

Don’t hide the splash when your async work starts finishing. Hide it when the UI that depends on that work can actually render.

That distinction matters most when startup includes auth restoration, remote configuration, or font loading. If your home screen depends on custom fonts and a signed-in state, the splash should cover that gap.

Una guía útil de la ecología de React Native más amplia se encuentra a continuación.

¿Qué esperar en Expo Go y builds de desarrollo?

Expo adds one extra wrinkle. The splash behavior you expect in a standalone build may not match what you see in Expo Go.

Esta desincronización confunde a muchos equipos. Cambia la lógica de los activos o el tiempo de configuración, prueba en Expo Go y concluyes que la configuración está rota cuando el problema real es que el entorno de desarrollo no se comporta como un binario de producción.

Utilice este modelo mental:

  • Expo Go es conveniente para la iteración but it isn’t the final authority on native splash behavior.
  • Desarrolladores están más cerca de la realidad ya que incluyen tu proyecto nativo generado.
  • Standalone builds are the final check for launch timing, theme behavior, and asset correctness.

Si tu pantalla de arranque sigue parpadeando o permaneciendo, el bug suele ser uno de tres cosas: ocultar demasiado pronto, renderizar null por demasiado tiempo después de ocultar, o probar en un entorno que no refleja el comportamiento de la liberación.

Configurando para Proyectos React Native Puros CLI

Un proyecto de React Native puro te da control directo sobre el comportamiento de arranque, lo cual es útil una vez que la pantalla de arranque tiene que coincidir con el trabajo real de inicio en lugar de mostrar un logo con un retraso fijo. Ese control viene con la responsabilidad nativa. Tienes que conectar Android e iOS correctamente, reconstruir con frecuencia y probar la transición entre la interfaz de arranque nativa y la primera pantalla de React en dispositivos reales.

En CLI proyectos, suelo recomendar react-native-bootsplash for new work. It fits current React Native projects better than older splash libraries, and the native setup is easier to reason about during upgrades. Older apps still ship with react-native-splash-screen, so you will run into it in maintenance work, but for a fresh setup the goal stays the same. Show a native launch surface immediately, then hide it only after the app can render meaningful UI.

Una infografía de cuatro pasos que ilustra el proceso para configurar una pantalla de arranque en React Native CLI.

Configuración de Android en un proyecto desnudo

Android splash setup lives in a few places at once: theme resources, drawables, AndroidManifest.xmly MainActivity. Esa división es por qué los pequeños errores crean flashes visibles.

El flujo habitual es directo:

  1. Generate splash assets for the Android resource folders you support.
  2. Define un tema de arranque con el color de fondo y el dibujo de pantalla correctos.
  3. Aplica ese tema a la actividad de lanzador en AndroidManifest.xml.
  4. Inicializa la pantalla de arranque en MainActivity.
  5. Oculta después de las tareas de inicio que bloquean la primera renderización.

A un patrón simplificado MainActivity.kt Este patrón a menudo se ve así:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // initialize splash handling here depending on the library
}

Este fragmento de código es intencionalmente genérico porque la llamada exacta depende de la biblioteca. El punto de integración nativo es usualmente la parte fácil. Los errores tienden a surgir de recursos y transiciones de tema.

Aquí están los problemas de Android que aparecen en producción:

  • Compatibilidad de tema: If the launch theme uses a different background color than your first app screen, users see a flash during handoff.
  • Recipientes de activos incorrectos: Android estira o desenfoca los activos que faltan en las carpetas de densidad esperadas.
  • Pruebas con Metro solo: Native resource changes usually need a clean rebuild. Hot reload will not validate launch behavior.
  • Reglas de arranque de Android 12: Newer Android versions apply their own splash behavior first, so custom setups need to respect those platform constraints.
  • Desempeño lento de JS después de ocultar: If React hides the splash before the root view can paint, users get a blank frame instead of a smooth transition.

El último punto importa más que la imagen en sí. Los problemas de sincronización se perciben como problemas de rendimiento.

Configuración de iOS en un proyecto desnudo

En iOS, el centro de gravedad es LaunchScreen.storyboard plus una pequeña función nativa en AppDelegateLa plataforma espera que la pantalla de inicio sea estática y ligera. Trátala como una instantánea de la estructura visual de la primera pantalla, no como un mini flujo de onboarding.

La configuración confiable se parece a esto:

  • Agrega recursos al catálogo de activos de Xcode.
  • Configurar LaunchScreen.storyboard con restricciones simples.
  • Mantener la disposición estática. Color de fondo, logo y espacio seguro suelen ser suficientes.
  • Agregar la llamada de arranque nativa de la biblioteca AppDelegate.
  • Hide the splash from JavaScript only after the app is completely ready to render.

Teams new to iOS often overbuild the storyboard. That usually backfires. Complex constraints, multiple nested views, or attempts to animate the launch screen make the setup harder to maintain and easier to break across device sizes.

Una pantalla de inicio simple es la opción más segura.

Bare CLI le da más control sobre la transición

Esta es la diferencia clave entre CLI gestionado por Expo y CLI desnudo. Expo te da un camino más rápido a una configuración predeterminada correcta. CLI desnudo te da la responsabilidad completa del pipeline de arranque nativo.

That trade-off becomes useful when startup is doing more than loading a bundle. Apps with auth restoration, encrypted storage reads, custom native SDK initialization, or white-label branding rules often need the extra control. Bare projects let you align the splash timing with that work instead of forcing everything through higher-level configuration.

Si planeas agregar una transición animada después de la inicialización, mantén la pantalla de inicio nativa estática y mueve la animación a la primera pantalla de React. Los trade-offs de rendimiento son similares a los que importan en cualquier ruta de inicio móvil. El trabajo pesado durante la primera pintura es costoso. Este Guía de rendimiento de animación en aplicaciones Capacitor aborda el mismo principio desde otra pila, y la lección se transfiere limpiamente a React Native.

CLI gestionado versus CLI desnudo

La comparación práctica es menos sobre la visualización de imágenes y más sobre dónde vive la complejidad del arranque.

Punto de decisión Expo-managed Bare CLI
Setup speed Configuración inicial más rápida Más trabajo nativo
Personalización nativa Más limitado Control total
Flujo de generación de activos Más declarativo Mas manual
Superficie de depuración Configuración de JS más capa nativa generada Archivos Android y iOS directos
Mejor ajuste Equipos optimizando para velocidad y consistencia Teams needing deep native control

If the app is already in Expo and the launch requirements are standard, staying there usually saves time. If the startup path depends on native initialization order, custom themes, or platform-specific boot logic, bare CLI is often the cleaner long-term choice.

Ambas flujos pueden enviar una pantalla de bienvenida pulida. La diferencia es quién controla la canalización de lanzamiento, su framework o su equipo.

Técnicas Avanzadas para Pantallas de Presentación Animadas y Rendimiento Óptimo

Pantallas de bienvenida animadas parecen pulidas cuando respetan la secuencia de arranque. Parecen baratas cuando la distraen.

That’s why I treat animation as an enhancement layer, not the foundation. The first job is still timing. If the app isn’t ready, the splash stays. If the app is ready, the transition should move quickly into the first usable screen.

La animación debe seguir la realidad de inicio.

Un patrón común es mantener la animación nativa simple, luego ejecutar una animación ligera de marca en la primera pantalla de React después del arranque. Esto te da más flexibilidad que intentar animar la superficie de arranque nativa real por sí misma.

Lottie es una elección práctica para este tipo de transición porque puede entregar movimiento sin crear una pila de animación personalizada pesada en la primera pantalla. La parte importante es la secuencia:

  • Native splash remains visible during critical startup work.
  • React monta la primera pantalla real o una pantalla de transición controlada.
  • La animación opcional solo se reproduce si no bloquea la interacción durante más tiempo del necesario.

Lo que no funciona es el antiguo setTimeout(2000) patrón. En un dispositivo rápido, eso hace que la aplicación espere por ninguna razón. En un dispositivo lento, a menudo simplemente reemplaza un estado de carga con otro.

Trata el arranque como orquestación

Un mejor modelo mental es el arranque como orquestación.La pantalla de arranque debe cubrir las tareas exactas que deben completarse antes de que la aplicación pueda mostrar contenido significativo.

Normalmente incluye una mezcla de:

  • Autenticación de arranque: Restaurar una sesión o decidir si redirigir a la página de inicio de sesión.
  • Leeras de almacenamiento esenciales: Temas, idiomas, estado de inicio y preferencias críticas conocidas.
  • Preparación de fuentes: Especially if the first screen depends on custom typography for layout stability.
  • Configuración remota que controla la interfaz: Solo si la primera pantalla no puede renderizarse de manera segura sin él.

Existen otra sutileza que muchos tutoriales omiten. El comportamiento de la pantalla de inicio cambia dependiendo del entorno. La discusión de manejo de pantalla de bienvenida de Expo en desarrollo y producción puntualiza que el comportamiento puede no aparecer de la misma manera en Expo Go que en compilaciones independientes, y que el manejo automático de la visibilidad cambia una vez que tomas el control manual. Eso es una de las razones por las que los ejemplos basados en retrasos envejecen mal. Ocultan la secuencia de inicio real en lugar de alinearse con ella.

A una pantalla de arranque no se debe hacer que parezca velocidad. Debe usarse para evitar que los usuarios vean UI no terminada.

Si estás agregando movimiento en una pila híbrida o evaluando el rendimiento de renderizado más amplio, Esta guía sobre rendimiento de animación en aplicaciones Capacitor. es un contexto útil porque la misma disciplina se aplica. Mantén el trabajo de inicio ligero, evita bloqueos innecesarios y deja que el soporte de animación respalde la responsividad en lugar de competir con ella.

Una nota práctica para los equipos que envían correcciones visuales fuera de las versiones binarias completas: plataformas como Capgo handle JavaScript, CSS, copy, config, and asset updates for Capacitor and Electron apps, but native splash changes in React Native still belong to the native build pipeline because the true splash screen appears before the JavaScript app is running.

Resolviendo Problemas Comunes de Pantalla de Bienvenida

Most splash problems fall into a small set of repeat offenders. The fix gets easier once you separate problemas de tiempo, problemas de sincronización, and problemas de integración nativa.

Comunidades de la comunidad han convergido en el mismo flujo básico en recientes guías de React Native: agregar la biblioteca, configurar activos de arranque nativos, llamar show during startup, and hide once the app is ready. Android setups commonly involve MainActivity y recursos XML o drawable, mientras que iOS se centra en LaunchScreen.storyboard y AppDelegateLa misma nota de resumen indica que Expo recomienda un cuadrado 1024×1024 PNG para iconos de aplicaciones y que EAS Build pueda generar los tamaños requeridos para proyectos creados con npx create-expo-app, como se resume Guía de pantalla de bienvenida de React Native.

Imagen de pantalla estirada o borrosa

Symptom: The logo looks soft, cropped, or oddly scaled.

La causa: No se exportó correctamente la imagen base, o el diseño depende de una pantalla rasterizada completa que no se adapta bien.

La solución: Sustituye el arte de cartel por un logo centrado en un fondo plano. Vuelve a exportar desde la fuente de diseño original, regenera los activos específicos de densidad y verifica que tus Android drawables o el catálogo de activos de iOS contengan los archivos previstos.

White screen after the splash hides

El síntoma: El splash nativo desaparece, luego los usuarios ven una ventana vacía antes de la primera pantalla.

La causa: Your app is hiding the splash before the root UI can render meaningful content.

La solución: Relaciona la ocultación del splash con la preparación, no con el tiempo transcurrido. En Expo, eso significa mantener el splash hasta que tu vista raíz pueda organizar la disposición. En proyectos desnudos, utiliza el patrón equivalente y asegúrate de que la primera pantalla renderizada no bloquee inmediatamente en más trabajo asíncrono.

Pantalla de espera faltante en una plataforma

Simptomático: Android la muestra, iOS no, o viceversa.

Causa: Una lado nativo no estaba completamente configurado. A menudo se trata de una referencia a una historia olvidada, un problema de cableado de tema o un activo no agregado al objetivo correcto.

Solución: Revisa los archivos específicos de plataforma uno a uno. En Android, inspecciona el tema de arranque y referencias de recursos. En iOS, confirma LaunchScreen.storyboard, asset catalog membership, and app target settings in Xcode.

Build breaks after adding splash configuration

Simptomático: The app stopped compiling after introducing a library or changing splash files.

Causa: Los archivos del proyecto nativo y la configuración generada pueden desincronizarse, especialmente después de cambios en plugins o activos.

Solución: Limpie la compilación, reinstale las dependencias si es necesario y reconstruya el proyecto nativo completamente. Si está en Expo con capas nativas generadas, regenere con cuidado y verifique la configuración de plugins. Si está en una aplicación desnuda, revise MainActivity, AppDelegate, nombres de recursos y cualquier edición de plist o manifestos para pequeñas discrepancias.

The fastest teams treat the splash screen as part of release engineering, not a one-time visual task. That matters even more when startup assets, UI text, or app-shell behavior need to change quickly after launch. Capgo gives Capacitor and Electron teams a way to ship JavaScript, CSS, copy, config, and asset fixes on the next launch with rollout controls and rollback support, which is useful when the problem is in the app layer rather than the native launch screen itself.

Continúe con Pantalla de bienvenida en React Native: Una guía completa para 2026

Si está utilizando Pantalla de bienvenida en React Native: Una guía completa para 2026 planear el comportamiento de medios y interfaz nativa, conectarlo con Usando @capgo/capacitor-actividades en vivo para la capacidad nativa en Usando @capgo/capacitor-actividades-en-vivo, @capgo/capacitor-actividades-en-vivo para el detalle de implementación en @capgo/capacitor-actividades-en-vivo, Usando @capgo/capacitor-reproductor-de-videos para la capacidad nativa en Usando @capgo/capacitor-reproductor-de-videos, @capgo/capacitor-reproductor-de-videos para el detalle de implementación en @capgo/capacitor-reproductor-de-videos, y Usando @capgo/capacitor-navegación-nativa para la capacidad nativa en Usando @capgo/capacitor-navegación-nativa.

Actualizaciones en vivo para aplicaciones Capacitor

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

Soporte humano de Martin

Comienza Ahora

Apoyo humano de Martin

Capgo gives you the best insights you need to create a truly professional mobile app.