react本机ios应用程序不';当设备旋转时,重新启动
当我旋转设备时,旧视图会旋转,但保持原来的尺寸,只使用屏幕的一部分,直到触摸屏幕,然后重新渲染。(这是在释放模式下:在调试模式下,它会自动重新启动,但仅在延迟一秒或两秒后)。这发生在运行iOS7和iOS9的模拟器和设备上 这个问题始于我将我的应用程序从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需要对我的代码进行大量更改
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');
...
}