次のコードは この実際の例 にあります。
私は次の反応ネイティブ要素を持っています:
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
} = React;
var SampleApp = React.createClass({
render: function() {
return (
<View style={styles.container}>
<View style={styles.descriptionContainerVer}>
<View style={styles.descriptionContainerHor}>
<Text style={styles.descriptionText} numberOfLines={5} >
Here is a really long text that you can do nothing about, its gonna be long wether you like it or not, so be prepared for it to go off screen. Right? Right..!
</Text>
</View>
</View>
<View style={styles.descriptionContainerVer2}>
<View style={styles.descriptionContainerHor}>
<Text style={styles.descriptionText} numberOfLines={5} >Some other long text which you can still do nothing about.. Off the screen we go then.</Text>
</View>
</View>
</View>);
}
});
AppRegistry.registerComponent('SampleApp', () => SampleApp);
次のスタイルで:
var styles = StyleSheet.create({
container:{
flex:1,
flexDirection:'column',
justifyContent: 'flex-start',
backgroundColor: 'grey'
},
descriptionContainerVer:{
flex:0.5, //height (according to its parent)
flexDirection: 'column', //its children will be in a row
alignItems: 'center',
backgroundColor: 'blue',
// alignSelf: 'center',
},
descriptionContainerVer2:{
flex:0.5, //height (according to its parent)
flexDirection: 'column', //its children will be in a row
alignItems: 'center',
backgroundColor: 'orange',
// alignSelf: 'center',
},
descriptionContainerHor:{
//width: 200, //I DON\'T want this line here, because I need to support many screen sizes
flex: 0.3, //width (according to its parent)
flexDirection: 'column', //its children will be in a column
alignItems: 'center', //align items according to this parent (like setting self align on each item)
justifyContent: 'center',
flexWrap: 'wrap'
},
descriptionText: {
backgroundColor: 'green',//Colors.transparentColor,
fontSize: 16,
color: 'white',
textAlign: 'center',
flexWrap: 'wrap'
}
});
これにより、次の画面が表示されます。
どのようにしてテキストが画面から出ないようにし、親の80%の幅で画面の中央に閉じ込めることができますか?
さまざまなモバイル画面でこれを実行し、動的にしたいので、width
を使用する必要はないと思うので、flexbox
に完全に依存する必要があると思います。
(それが、descriptionContainerHor
内にflex: 0.8
を持っている最初の理由でした。
私が達成したいのは次のようなものです:
ありがとうございました!
以下のリンクから解決策を見つけました。
<View style={{flexDirection:'row'}}>
<Text style={{flex: 1, flexWrap: 'wrap'}}> You miss fdddddd dddddddd
You miss fdd
</Text>
</View>
彼に感謝したい場合は、以下がGithubプロファイルのユーザーリンクです。
編集:2019年4月9日(火)
@ sudoPlzがコメントで言及したように、この回答を更新するflexShrink: 1
と連携します。
これは 既知のバグ です。 flexWrap: 'wrap'
はうまくいきませんでしたが、この解決策はほとんどの人にとってうまくいくようです
コード
<View style={styles.container}>
<Text>Some text</Text>
</View>
スタイル
export default StyleSheet.create({
container: {
width: 0,
flexGrow: 1,
flex: 1,
}
});
descriptionContainerVer
とflexDirection: row
からそれぞれdescriptionContainerVer2
を削除すると機能します。
PDATE(コメントを参照)
あなたが望んでいると思うことを達成するために、いくつかの変更を加えました。まず、descriptionContainerHor
コンポーネントを削除しました。次に、垂直ビューのflexDirection
をrow
に設定し、alignItems: 'center'
およびjustifyContent: 'center'
を追加しました。垂直ビューは実際には水平軸に沿って積み重ねられているため、名前からVer
部分を削除しました。
これで、コンテンツを垂直方向と水平方向に揃えてx軸に沿ってスタックするラッパービューができました。次に、View
コンポーネントの左右に2つの非表示のText
コンポーネントを配置して、パディングを行います。
このような:
<View style={styles.descriptionContainer}>
<View style={styles.padding}/>
<Text style={styles.descriptionText} numberOfLines={5} >
Here is a really long text that you can do nothing about, its gonna be long wether you like it or not, so be prepared for it to go off screen. Right? Right..!
</Text>
<View style={styles.padding}/>
</View>
この:
descriptionContainer:{
flex:0.5, //height (according to its parent),
flexDirection: 'row',
backgroundColor: 'blue',
alignItems: 'center',
justifyContent: 'center',
// alignSelf: 'center',
},
padding: {
flex: 0.1
},
descriptionText: {
backgroundColor: 'green',//Colors.transparentColor,
fontSize: 16,
flex: 0.8,
color: 'white',
textAlign: 'center',
flexWrap: 'wrap'
},
その後、あなたは私があなたが後にいたと信じるものを得る。
さらなる改善
これで、青とオレンジのビュー内に複数のテキスト領域を積み重ねたい場合、次のようなことができます。
<View style={styles.descriptionContainer2}>
<View style={styles.padding}/>
<View style={styles.textWrap}>
<Text style={styles.descriptionText} numberOfLines={5} >
Some other long text which you can still do nothing about.. Off the screen we go then.
</Text>
<Text style={styles.descriptionText} numberOfLines={5} >
Another column of text.
</Text>
</View>
<View style={styles.padding}/>
</View>
textWrap
のスタイルは次のとおりです。
textWrap: {
flexDirection: 'column',
flex: 0.8
},
お役に立てれば!
以下のようなflexを使用して<Text>
のラッパーが必要です。
<View style={{ flex: 1 }}>
<Text>Your Text</Text>
</View>
この問題を発見した別の解決策は、ビュー内にテキストをラップすることです。また、ビューのスタイルをflexに設定します.1。
wordWrap: 'break-Word'
この方法では、同じ要素/コンポーネントにハードコードされた幅があってもテキストは折り返されます。
width: 100
width: '80%'
私の場合、これは3列を保持し、テキストを読み続けるために重要でした。
私は同じ問題を抱えていて、flexWrap、flex:1(テキストコンポーネント内)があり、flexが機能していないことを付け加えました。
最終的に、テキストコンポーネントのラッパーの幅をデバイスの幅に設定し、テキストの折り返しを開始しました。 const win = Dimensions.get('window');
<View style={{
flex: 1,
flexDirection: 'column',
justifyContent: 'center',
alignSelf: 'center',
width: win.width
}}>
<Text style={{ top: 0, alignSelf: 'center' }} >{image.title}</Text>
<Text style={{ alignSelf: 'center' }}>{image.description}</Text>
</View>