2017-07-28 6 views
0

私はリアクションネイティブのn00bだから、おそらく私は何か残忍なことが分かりません。ネイティブイメージのデバイスのサイズが変更されない(iOS)向きが変更されますか?

portrait

を...しかし、私は、デバイスを回転させ、このランドスケープモード(悪い):

 <Image 
     source={signoutGradient} 
     resizeMode="cover" 
     style={{ height: 60, justifyContent: 'center', alignItems: 'center', backgroundColor: 'rgba(0,0,0,0)' }} 
     > 
     <Button 
      title="SIGN OUT" 
      color="#FFFFFF" 
      onPress={this.onPressSignOut} 
     /> 
     </Image> 

は...(良い)私のiOSデバイス上の肖像画で私にこれを提供します。どうして?これを修正するには?私は実際のPNG画像ファイルのサイズは重要ではないと予想しています。なぜなら、必要な場合にはそれを大きくする必要があるからです。それは起こっていないようです。

landscape

+0

お試しください 'resizeMode =" contains "'おそらくあなたのウィンドウの寸法に対して固定するように幅と高さを設定する必要があります –

+0

@KhalilKhalafどのようにi "幅と高さをあなたのウィンドウの大きさに対して固定するように設定していますか?" – xaphod

+0

[** this **](https://stackoverflow.com/a/32031698/5890227)から、ウィンドウの高さと幅を取得できます。次に、イメージを例えば 'height/10'や' width/2'などに設定します。それがどうなっているのか教えてください。もっと助けてください。 –

答えて

0

画面が回転するときFYI Dimensionsモジュールは自動的に更新されません。何らかの形で回転を検出して再レンダリングを強制することができる場合にのみオプションです。

Viewで応答する必要があるコンポーネントをラップし、次にonLayoutプロパティを使用することもできます。 onLayoutとして渡された関数は、変更されたときにいつでもViewの更新された位置と寸法を含む{nativeEvent: { layout: {x, y, width, height}}}を受け取るでしょう。これらをコンポーネントの状態に書き込むと、新しい高さと幅が自動的に再計算され、画面が回転するとレンダリングが開始されます(たとえば、ルートViewonLayoutを設定し、画像のwidthを画面全体の幅に更新します)。 「onLayout」のctrl+fhereです。

スタイル小道具もローテーション時に更新されますので、例えばルートコンポーネントにflex:1と設定することができます。また、何らかの形でフレックスボックスを使用して、すべてのスタイルに応じたスタイルを維持できます。

+0

可能な限り 'flex:1'を既に持っています。問題は、コンポーネントのサイズが変更されますが、 'resizeMode =" cover "'はローテーション時にイメージのサイズを変更しません。 – xaphod

+0

@xaphodローテーション後にイメージを含むコンポーネントの状態を更新するとどうなりますか?それはサイズ変更されますか? – SoZettaSho

0

あなたのイメージスタイルにフレックスを追加すると、問題が解決するはずです。あなたがデフォルトの高さだけを設定し、幅は設定しない限り。私の場合、画像の幅と高さの両方を設定していて、デバイスが横長になったときに同じ問題が発生しました。一度私は幅を削除し、フレックスを追加しました:1私の問題は解決しました

+0

いいえ、フレックス:1は、イメージがそれよりもはるかに多くのスペースをとります。つまり、固定された高さを無視します。ビューにラッピングすると、画像は縮尺変更されませんが、resizeMode = "cover"と表示されていれば、画像は拡大縮小されません。 – xaphod

関連する問題