1

デバイスを回転させると、古いビューが回転しますが、画面がタッチされるまで、画面の一部を使用するだけで同じ寸法が維持され、その後再レンダリングされます。(これはリリース モードです。デバッグ モードでは、自動的に再レン​​ダリングされますが、1 秒または 2 秒の遅延の後でのみです)。これは、iOS7 および iOS9 を実行しているシミュレーターおよびデバイスで発生します。

この問題は、アプリをreact-native0.24.1 から 0.32.0 にアップグレードした後に発生しました。もちろん、このアップグレードでは、セーターから糸を引き抜くように、多くのサードパーティの反応ネイティブ ライブラリをアップグレードする必要がありました。特に、react-native-router-flux3.24.1 から 3.35.0 にアップグレードするには、コードに多くの変更が必要でした。

とはいえ、この問題を引き起こす可能性のある変更は何も考えられません。最初はreact-native-orientation、アップグレードが特に難しいと思ったので、プロジェクトから完全に削除しましたが、役に立ちませんでした。

onLayout最上位ビューにイベントのコールバックを追加し、console.log印刷しました。このイベントは、デバイスが回転した後、画面がタッチされるまで明らかにトリガーされません。次に、onLayout デバッグ ステートメントが出力され、react-native コードが同時に再レンダリングされます。

そのため、ネイティブ コードは、他のイベントにピギーバックできるようになるまで、ブリッジを介して JavaScript コードに回転イベントを送信していないようです。

これをデバッグする方法についての提案は大歓迎です。

更新: 0.28flex:1での重大な変更に関するメモを思い出しました。react-nativeこれは何か関係があるのだろうか?彼らが言うには:

以前に flex: 1 を使用していた場合、必要のない場所でこの変更を行うとレイアウトが壊れる可能性があります

問題は、それがいつ必要になるか、そしてそれが必要かどうかをどうやって知るかということです。それに関するドキュメントが見つからないようです。flex:1そうしないと悪いことが起こることがわかったので、私はいつもどこでも使用してきました。Scrollviewドキュメントで言う:

{flex: 1} をビュー スタックに転送するのを忘れると、ここでエラーが発生する可能性があります

そうすれば、悪いことが起こる可能性があるようです。残念。彼らは実際にあなたが何をしているのかをあなたに知ってもらいたいようです. ハッカーは何をしますか?

更新 2: それは問題ではないようです。もちろん、ハッカーが行うことはハッキングです。{flex: 1}最上位レベルから始めて、1 つずつ調べて削除しました。ほとんどの場合、レイアウトが壊れてしまい、この問題を解決することはできませんでした。

4

3 に答える 3

1

これは明らかに のバグでしたreact-native 0.32.0

すべてをクリーンアップして、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コミットがあります。

于 2016-09-14T20:01:53.830 に答える