12k
All articles

如何在 React Native 中构建启动屏幕(附代码示例)

介绍如何使用 Xcode、Info.plist 和 react-native-splash-screen 为 iOS 与 Android 构建 React Native 启动屏幕,附分步代码示例。

OpenReplay Team
OpenReplay Team
如何在 React Native 中构建启动屏幕(附代码示例)

在移动应用中,第一印象至关重要。当用户启动您的 React Native 应用时,启动屏幕是他们看到的第一个界面。启动屏幕在应用初始化时显示您的应用标志或品牌,通过避免空白屏幕并向用户保证应用正在加载,为您的应用提供更加精致的感觉。

要点

  • 启动屏幕是 React Native 应用启动时显示品牌的初始屏幕
  • iOS 要求启动屏幕作为平台用户体验的一部分
  • 两种实现方法:通过 Xcode 手动设置或使用 react-native-splash-screen 等库
  • 适当的时间控制和平滑过渡对专业用户体验至关重要
  • 将启动屏幕的背景与应用的第一个屏幕匹配,实现无缝过渡

什么是 React Native 中的启动屏幕?

启动屏幕是应用启动时出现的初始屏幕。在 React Native 中,启动屏幕通常在纯色背景上显示应用名称、标志或其他品牌元素。在原生代码加载和准备 React Native 应用期间,它保持可见。启动屏幕的主要目的是:

  • 品牌展示:立即显示应用品牌
  • 用户体验:防止用户在应用启动期间看到空白或无响应的屏幕
  • 速度感知:启动屏幕给人一种正在进行操作的印象,使加载时间感觉更短

为什么在 React Native 的 iOS 应用中使用启动屏幕?

所有移动应用都能从启动屏幕中受益,但在 iOS 上它们尤为重要。事实上,苹果要求应用必须有启动屏幕 – 在 iOS 上,启动屏幕不仅仅是为了展示;它是预期用户体验的一部分。以下是关键原因:

  • 增强用户体验:带有精心设计的启动屏幕的 iOS 应用感觉更流畅、更专业
  • 应用品牌:启动屏幕展示您的应用标志、标语或艺术作品
  • 管理加载时间:iOS 将显示启动屏幕直到应用准备就绪,掩盖启动过程中的任何延迟

在 React Native 中设置启动屏幕(iOS 特定)

步骤 1:创建启动屏幕图像

首先,您需要一个启动屏幕图像:

  • 尺寸:使用高分辨率图像(至少 2000 x 2000 像素),在所有设备屏幕上看起来都不错
  • 格式:PNG 是启动屏幕最常用的格式
  • 方向和安全区域:将重要内容保持在图像中心区域

专业提示:App Icon Generator (appicon.co) 这样的工具可以帮助为各种 iOS 屏幕创建正确尺寸的图像。

步骤 2:在 Xcode 中添加启动屏幕

  1. 在 Xcode 中打开 iOS 项目:导航到 ios 文件夹并打开 .xcworkspace.xcodeproj 文件。
  2. 添加图像资源:在 Xcode 中,找到 Images.xcassets,创建一个名为 ""Splash""新图像集,并添加您的启动图像。
  3. 编辑启动屏幕故事板:打开 LaunchScreen.storyboard,删除任何默认元素,并添加一个图像视图。将图像设置为您的启动图像,调整大小或设置约束,并设置内容模式(Aspect Fit 或 Aspect Fill)。
  4. 设置安全区域(如需要):如有必要,禁用""使用安全区域""以允许图像延伸到状态栏/刘海区域下方。

步骤 3:修改 Info.plist 以获得正确的显示设置

  1. 打开 Info.plist 并查找键 ""UILaunchStoryboardName""
  2. 确保其值是您的故事板名称(例如,""LaunchScreen"")。
  3. 验证 LaunchScreen 文件已包含在应用目标中。

现在在 iOS 模拟器或设备上运行您的应用,您会看到启动屏幕在启动时短暂出现。

使用库实现启动屏幕

使用库可以简化流程并提供额外的控制。两个流行的库是:

  • react-native-splash-screen – 广泛用于 iOS 和 Android
  • expo-splash-screen – 用于 Expo 管理工作流

让我们使用 react-native-splash-screen

  1. 安装库

    npm install react-native-splash-screen --save
    

    yarn add react-native-splash-screen
    
  2. iOS:安装 pods

    cd ios
    pod install
    cd ..
    
  3. 配置 iOS 原生代码

    • 修改 AppDelegate.m

      #import ""RNSplashScreen.h""  // 添加这个导入
      

      application:didFinishLaunchingWithOptions: 方法中,添加:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
          // ... 现有的 React Native 引导代码 ...
          [self.window makeKeyAndVisible];
          [RNSplashScreen show];  // 显示启动屏幕
          return YES;
      }
      
    • 验证 Info.plist:确保 UILaunchStoryboardName 仍然设置为您的 LaunchScreen 故事板。

  4. 配置 Android 原生代码(如需要)

    • 在 MainActivity 中导入 SplashScreen
    • super.onCreate 之前调用 SplashScreen.show(this)
    • 添加 launch_screen.xml 布局
    • 更新 AndroidManifest
  5. 在 React Native 代码中隐藏启动屏幕

    // App.js (或 index.js)
    import React, { useEffect } from 'react';
    import { View, Text } from 'react-native';
    import SplashScreen from 'react-native-splash-screen';  // 导入库
    
    const App = () => {
      useEffect(() => {
        // 一旦应用准备就绪,隐藏启动屏幕
        SplashScreen.hide();
      }, []);
    
      return (
        <View>{/* 您的应用 UI 组件从这里开始 */}
          <Text>你好,主应用!</Text>
        </View>
      );
    };
    
    export default App;
    

处理启动屏幕时间和过渡

  • 保持简短:启动屏幕应该只在必要的时间内可见(理想情况下 1-3 秒)
  • 准备就绪时隐藏:一旦应用的主要内容准备好显示,就调用 SplashScreen.hide()
  • 匹配过渡:在应用的初始屏幕中使用与启动屏幕相同的背景颜色
  • 平滑动画:考虑在隐藏启动屏幕时添加微妙的动画
  • 一致的持续时间:有些应用即使应用加载更快,也会显示启动屏幕最少时间(例如,2 秒)

常见问题和调试技巧

  • 启动屏幕不显示:检查 Info.plist 中的 UILaunchStoryboardName,验证 LaunchScreen 文件是否在应用目标中,并确认图像资源已包含
  • 图像被拉伸或裁剪:检查内容模式设置,检查约束,并验证您提供了正确的图像尺寸
  • 启动屏幕闪烁后出现空白屏幕:仅在 UI 准备就绪时隐藏启动屏幕,并匹配背景颜色
  • 启动屏幕卡住:确保调用了 SplashScreen.hide(),并检查是否有早期错误
  • iPad 上的纵横比不正确:使用约束而不是固定尺寸,将故事板设备设置为通用,并提供高分辨率图像
  • 更改不反映:清理构建,重新安装应用,并确保您正在编辑正确的文件

结论

为您的 React Native 应用添加启动屏幕是一个小步骤,但能带来更专业和用户友好的体验。通过在 Xcode 中手动设置启动屏幕或使用 react-native-splash-screen 等库,您可以集成一个显示您品牌并在启动期间保持用户参与的启动屏幕。

记住要考虑时间控制,并确保启动屏幕与应用的第一个屏幕之间的平滑过渡。通过正确的实现,您的启动屏幕将从应用启动的那一刻起就提升应用的感知质量。

常见问题

如果我重新设计品牌或想要新设计,如何更改启动屏幕?

在 Xcode 资源目录中用新图像替换旧的启动图像(或添加新的图像集并更新 LaunchScreen.storyboard 中的图像视图)。如果您使用了背景颜色,请在故事板中调整它。然后重新构建您的应用。由于启动屏幕是原生代码的一部分,您需要重新编译应用才能看到更改。

我可以在 React Native 启动屏幕中使用动画吗?

原生启动屏幕本质上是静态的。但是,您可以通过以下方式创造动画的错觉:1) 为启动屏幕和第一个屏幕之间的过渡添加动画,2) 设计第一个屏幕,使其看起来类似于启动屏幕,并使用淡出或向上滑动动画,或 3) 使用带有动画控制的 Expo SplashScreen。任何动画都将在应用加载后开始,因为实际的原生启动屏幕无法动画。

如何在 iOS 模拟器上测试我的启动屏幕?

要测试您的启动屏幕,在 iOS 模拟器或设备上进行应用的冷启动。在 Xcode 中,按运行按钮来安装并重新启动应用。更改后,清理构建(Product > Clean Build Folder)或在重新运行前卸载应用。在多个模拟器尺寸上测试,看看启动屏幕如何缩放。对于 Expo 应用,您可能需要执行 Expo 预构建或使用模拟器构建来查看自定义启动屏幕。

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers

We use cookies to improve your experience. By using our site, you accept cookies.