当我旋转设备时,旧视图会旋转但保持与原来相同的尺寸,仅使用屏幕的一部分,直到触摸屏幕,然后重新渲染。(这是在发布模式下:在调试模式下,它会自动重新渲染,但仅在延迟一两秒后)。这发生在模拟器和运行 iOS7 和 iOS9 的设备上。
这个问题是在我将我的应用程序从react-native
0.24.1 升级到 0.32.0 后开始的。当然,这种升级就像从毛衣中拉出线一样,需要升级许多 3rd 方 react-native 库。特别是,react-native-router-flux
从 3.24.1 升级到 3.35.0 需要对我的代码进行大量更改。
也就是说,我想不出任何可能导致此问题的更改。起初我怀疑react-native-orientation
,升级特别棘手,所以我将它完全从项目中删除,这没有帮助。
onLayout
我在顶层视图中添加了事件的回调,并带有console.log
打印输出。这个事件显然不会在设备旋转后触发,直到屏幕被触摸。然后打印 onLayout 调试语句,同时重新渲染 react-native 代码。
因此,似乎本机代码不会通过桥将旋转事件发送到 javascript 代码,直到它可以搭载其他事件。
任何有关如何调试的建议将不胜感激。
更新:我只记得关于0.28中的flex:1
重大更改的说明。react-native
我想知道这是否与它有关?他们说:
如果您以前使用过 flex: 1 在不必要的情况下,此更改可能会破坏您的布局
问题是,什么时候有必要,你怎么知道它是否有必要?我似乎找不到关于它的文档。我总是flex:1
到处使用,因为我发现如果你不这样做,就会发生坏事。在Scrollview
文档中说:
忘记将 {flex: 1} 向下传输视图堆栈可能会导致此处出现错误
现在看来,如果你这样做,可能会发生坏事。真可惜。他们似乎真的想让你知道你在做什么。黑客要做什么?
更新2:这似乎不是问题。黑客所做的当然是hack。我{flex: 1}
从顶层开始逐一删除。在大多数情况下,它破坏了布局,并且在任何情况下都没有解决这个问题。