2016-09-13 7 views
1

デバイスを回転すると、古いビューは回転しますが、画面の一部を使用するだけで、レンダリングする。 (これはリリースモードです:デバッグモードでは、自動的に再レン​​ダリングを行いますが、1秒または2秒の遅れがある場合のみ)。これは、iOS7とiOS9を実行するシミュレータとデバイスで発生します。反応ネイティブのiosアプリは、デバイスが回転しても再レンダリングされません。

この問題は、私のアプリケーションをreact-native 0.24.1から0.32.0にアップグレードした後に開始されました。このアップグレードは、もちろん、セーターからスレッドを引き出すのと同じように、サードパーティ製のネイティブライブラリをアップグレードする必要がありました。特に、react-native-router-fluxを3.24.1から3.35.0にアップグレードすると、自分のコードに多くの変更が必要でした。

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

イベントのコールバックを最上位ビューに追加しました。console.logの出力があります。このイベントは、画面がタッチされるまで、デバイスが回転した後は明らかにトリガされません。次に、onLayoutデバッグ文が出力され、同時に反応ネイティブコードがrerendersします。

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

これをデバッグする方法についてのご意見は、大変ありがとうございます。

更新日:flex:1の変更点が覚えています。react-native 0.28。これと関係があるのだろうか?彼らは言う:

以前フレックス使用した場合:この変更は、おそらくあなたのレイアウト壊れる不要1

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

は{フレックス:1}転送し忘れるビュースタックダウンすると、ここでエラーに

を導くことができる今、あなたがしなければ悪いことが起こることができそうです。バマー。彼らは実際にあなたがしていることを知ってほしいと思うようです。ハッカーは何をするのですか?

更新2:これは問題ではないようです。もちろん、ハッカーはハックです。私は通過し、各{flex: 1}をトップレベルから順番に1つずつ削除しました。ほとんどの場合、レイアウトが壊れてしまい、この問題は解決されませんでした。

答えて

2

これは明らかに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は、これに関連すると思われるcommitを持っています。

0

RN 0.44.0ではまだ動作しません。すべてのレンダリングで画面の幅を確認し、それに応じて子のサイズを変更しますが、renderはデバイスの回転で呼び出されません。 Cmd-Dを押して更新するときだけ、すべてが正しく再描画されます。

render() { 
    let { width } = Dimensions.get('window'); 
    ... 
} 
関連する問題