react本机ios应用程序不';当设备旋转时,重新启动

react本机ios应用程序不';当设备旋转时,重新启动,ios,react-native,react-native-router-flux,Ios,React Native,React Native Router Flux,当我旋转设备时,旧视图会旋转,但保持原来的尺寸,只使用屏幕的一部分,直到触摸屏幕,然后重新渲染。(这是在释放模式下:在调试模式下,它会自动重新启动,但仅在延迟一秒或两秒后)。这发生在运行iOS7和iOS9的模拟器和设备上 这个问题始于我将我的应用程序从react native0.24.1升级到0.32.0之后。当然,这种升级就像从毛衣上拔出一根线一样,需要升级大量的第三方本地库。特别是,将react native router flux从3.24.1升级到3.35.0需要对我的代码进行大量更改

当我旋转设备时,旧视图会旋转,但保持原来的尺寸,只使用屏幕的一部分,直到触摸屏幕,然后重新渲染。(这是在释放模式下:在调试模式下,它会自动重新启动,但仅在延迟一秒或两秒后)。这发生在运行iOS7和iOS9的模拟器和设备上

这个问题始于我将我的应用程序从
react native
0.24.1升级到0.32.0之后。当然,这种升级就像从毛衣上拔出一根线一样,需要升级大量的第三方本地库。特别是,将react native router flux从3.24.1升级到3.35.0需要对我的代码进行大量更改

也就是说,我想不出我改变了什么会导致这个问题。起初,我怀疑
react native-orientation
,这对升级特别棘手,所以我只是将其完全从项目中删除,这没有任何帮助

我在顶层视图中为
onLayout
事件添加了一个回调,带有
console.log
打印输出。在触摸屏幕之前,旋转设备后显然不会触发此事件。然后打印onLayout调试语句,同时重新加载react本机代码

因此,本机代码似乎不会跨桥将旋转事件发送到javascript代码,直到它能够搭载其他事件

任何关于如何调试的建议都将不胜感激

更新:我刚刚想起了关于
flex:1
react native
0.28中打破变化的注释。我想知道这是否与此有关?他们说:

如果您以前在不必要的地方使用flex:1,此更改可能会破坏您的布局

问题是,什么时候有必要,你如何知道是否有必要?我似乎找不到关于它的文档。我总是到处使用flex:1,因为我发现如果你不这样做,坏事就会发生。在
滚动视图中
文档中说:

忘记将{flex:1}向下传输到视图堆栈可能会导致错误

现在看来,如果你这样做,坏事可能会发生。真倒霉看起来他们真的想让你知道你在做什么。黑客该怎么做


更新2:这似乎不是问题所在。当然,黑客所做的就是黑客。从顶层开始,我逐一检查并删除了每个
{flex:1}
。在大多数情况下,它破坏了布局,但在任何情况下都没有解决此问题。

这显然是
react native 0.32.0
中的一个bug

我决定清理所有内容并从npm重新安装:


rm-rf$TMPDIR/react-*&&watchman watch del all&&rm-rf ios/build/ModuleCache/*&&rm-rf node_modules/&&npm cache clean&&npm i

当我这样做时,它选择了
react native 0.32.1
,问题就消失了。
0.32.1
有一个可能与此相关的问题。

它在RN 0.44.0中仍然不起作用,我在每个渲染中检查屏幕宽度,并相应地调整子级大小,但在设备旋转时不调用
render
。只有当我按Cmd-D刷新时,所有内容才能正确地重新渲染

render() {
   let { width } = Dimensions.get('window');
   ...
}