Kode berikut dapat ditemukan dalam contoh langsung ini
Saya punya elemen react native berikut:
'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);
dengan gaya berikut:
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'
}
});
Ini menghasilkan layar berikut:
Bagaimana cara menghentikan teks agar tidak keluar dari layar dan membuatnya tetap terbatas di tengah layar dengan lebar yaitu 80% dari induk.
Saya rasa saya tidak harus menggunakan width
karena saya akan menjalankan ini di BANYAK layar ponsel yang berbeda dan saya ingin ini menjadi dinamis, jadi saya pikir saya harus mengandalkan sepenuhnya flexbox
.
(Itulah alasan awal mengapa saya berada flex: 0.8
di dalam descriptionContainerHor
.
Yang ingin saya capai adalah seperti ini:
Terima kasih!
sumber
flexShrink: 1
diterapkan pada tampilan induk akan membantu juga.Ini adalah bug yang diketahui .
flexWrap: 'wrap'
tidak berhasil untuk saya tetapi solusi ini tampaknya berhasil untuk kebanyakan orangKode
Gaya
sumber
Solusi untuk masalah itu adalah
flexShrink: 1
.Tergantung pada pengaturan Anda, Anda mungkin juga perlu menambahkan
flexShrink: 1
ke orang<View>
tua juga, agar ini bekerja, jadi mainkan dengan itu dan Anda akan berhasil.Solusinya ditemukan oleh Adam Pietrasiak di utas ini.
sumber
Anda hanya perlu memiliki pembungkus untuk Anda
<Text>
dengan flex seperti di bawah ini;sumber
flex: 1
itu yang Anda butuhkan.Ini berfungsi jika Anda menghapus
flexDirection: row
daridescriptionContainerVer
dandescriptionContainerVer2
masing - masing.UPDATE (lihat komentar)
Saya membuat beberapa perubahan untuk mencapai apa yang menurut saya Anda cari. Pertama-tama saya menghapus
descriptionContainerHor
komponen. Kemudian saya mengaturflexDirection
tampilan vertikal kerow
dan menambahkanalignItems: 'center'
danjustifyContent: 'center'
. Karena tampilan vertikal sekarang sebenarnya ditumpuk di sepanjang sumbu horizontal, saya menghapusVer
bagian dari namanya.Jadi sekarang Anda memiliki tampilan pembungkus yang harus secara vertikal dan horizontal menyelaraskan kontennya dan menumpuknya di sepanjang sumbu x. Saya kemudian hanya meletakkan dua
View
komponen yang tidak terlihat di sisi kiri dan kananText
komponen untuk melakukan padding.Seperti ini:
Dan ini:
Kemudian Anda mendapatkan apa yang saya yakin Anda kejar.
PENINGKATAN LEBIH LANJUT
Sekarang jika Anda ingin menumpuk beberapa area teks dalam tampilan biru dan oranye, Anda dapat melakukan sesuatu seperti ini:
Dimana
textWrap
yang ditata seperti ini:Semoga ini membantu!
sumber
flexDirection: row
adalah karena (jika saya memiliki hak ini di kepala saya)flexDirection
menentukan arah 'anak-anak' dari orang tua itu akan ditumpuk. Sekarang saya ingin teks menjadi anak tengah dalam orang tua yang menumpuk anak-anak dalam satu baris, dan menempati 80% dari lebar orang tua (seperti foto kedua). Bisakah Anda memperbarui jawaban sedikit untuk mencerminkan itu? Saya bersedia menerima ini sebagai jawabannya.flexDirection: "row"
adalah inti dari masalah saya, mencoba segala sesuatu tanpa hasil. UbahflexDirection
menjadicolumn
dan teks di dalamnya akan membungkus secara normal.Solusi lain yang saya temukan untuk masalah ini adalah dengan membungkus Teks di dalam Tampilan. Juga atur gaya View ke flex: 1.
sumber
Saya ingin menambahkan bahwa saya mengalami masalah yang sama dan flexWrap, flex: 1 (dalam komponen teks), tidak ada flex yang berhasil untuk saya.
Akhirnya, saya mengatur lebar pembungkus komponen teks saya ke lebar perangkat dan teks mulai membungkus.
const win = Dimensions.get('window');
sumber
{flex: aNumber} adalah semua yang Anda butuhkan!
Cukup atur 'flex' ke nomor yang sesuai untuk Anda. Dan kemudian teks akan dibungkus.
sumber
Dalam versi 0.62.2 dari React Native, saya hanya meletakkan "flex-shrink: 1" di Container of my "Text", tapi ingat baris flex-direction: di View of container. Terima kasih teman-teman atas bantuannya.
Kode saya:
sumber
solusi saya di bawah ini:
gaya:
hasil: [
sumber
sumber