在iOS中,应用程序启动后立即显示React Native Modal冻结屏幕



我有一个React Native应用程序,它基本上在启动时执行以下操作:

  1. 隐藏启动屏幕(使用react原生bootsplash(
  2. 渲染主屏幕,该屏幕从API获取数据并在平面列表中显示卡组件
  3. 根据用户的位置,立即打开带有建议的模态(使用react native模态(

这种流动大约在3秒内发生。

它在安卓系统上运行如预期。尽管,在iOS中,我面临以下问题:

打开应用程序后,渲染的主屏幕将冻结,并且不会显示模态。此屏幕是抽屉导航器的子屏幕,抽屉导航器可以继续工作。因此,我可以从标题打开和关闭抽屉菜单,但主屏幕完全冻结。

到目前为止我进行的测试:

  • 删除模态组件:屏幕不会冻结
  • 转到另一个屏幕(通过抽屉菜单(并返回主屏幕:工作正常(渲染列表、打开模态等(,即没有冻结
  • 从RN调试菜单重新加载应用程序(shake或Cmd+Control+Z(:正常工作(渲染列表、打开模态等(,即不冻结

重要的是要注意,在打开模态之前,应用程序会获取用户的位置。因此,这个问题似乎与位置逻辑无关。在我删除Modal的测试用例中,位置逻辑保持不变,屏幕没有冻结。

考虑到所描述的行为,在我看来,渲染启动屏幕的情节板/视图和模态组件之间似乎存在某种冲突,因为当我打开应用程序时会发生这种冲突,而当我从RN菜单重新加载时不会发生。

因此,我测试了等待2秒钟后再更改打开模式的状态,如下所示:

setTimeout(() => setModalOpen(true), 2000);

它起作用了!尽管如此,如果我将超时时间降低到1秒,它仍然会冻结。根据我的测试,阈值似乎在1.3到1.5秒左右,这意味着任何低于该阈值的东西都会导致结冰,而高于该阈值的一切都能正常工作。

我已经在模拟器(iPhone 11-iOS 13.5(和设备(iPhone XR-iOS 14.2(中进行了测试。

有人知道到底是什么原因导致了这种行为吗?以及如何在不使用超时作为解决方法的情况下避免这种行为?

在我的例子中,当我从react native导入并使用模式窗口时,我有一个冻结的应用程序。我通过将库更改为UI小猫来修复它。

最新更新