Я закончил тем, что сделал решение, которое не изящно:
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
flex: 1,
alignSelf: 'center',
},
wordsWrapper: {
flex: 1,
flexDirection: 'row'
},
wordsContent: {
flex: 0.5,
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
flexWrap: 'wrap',
},
word: {
alignSelf: 'center',
paddingLeft: 5,
paddingRight: 5
},
txt: {
paddingLeft: 5,
paddingRight: 5,
borderWidth: 0.5,
justifyContent: 'center',
borderColor: 'black',
}
});
export default class App extends Component<Props> {
getWordsPerColumn() {
const words = ['asdfasdf', 'asdf asdf', 'qwerqwer', '123321', 'asdfasdf', 'asdf asdf', 'qwerqwer', '123321', 'asdf asdf', 'qwerqwer', '123321', 'asdf asdf', 'qwerqwer', '123321', 'qwerqwer', '123321' ];
const maxColumns = 5;
const cells = 4;
let columns = maxColumns;
if (words.length <= 4) {
columns = 1;
} else if (words.length <= 8) {
columns = 2;
} else if (words.length <= 12) {
columns = 3;
} else if (words.length <= 16) {
columns = 4;
}
const groups = [];
let groupNumber = 0;
let keys = 0;
for(let i = 1; i <= columns; i++) {
if (!groups[groupNumber]) {
groups.push([]);
}
for(let j = 1; j <= cells; j++) {
groups[groupNumber].push(
<Text key={keys} style={styles.word}>
{
words[keys]
}
</Text>
);
keys++;
}
groupNumber++;
}
return groups;
}
render() {
let key = 0;
return (
<View style={styles.container}>
<View style={styles.wordsContent}>
<Text style={styles.welcome}>
Words:
</Text>
<View style={styles.wordsWrapper}>
{
this.getWordsPerColumn().map((column, i) => (
<View key={key++} style={styles.txt} >
{
column.map((w, j) => w)
}
</View>
)
)
}
</View>
</View>
</View>
);
}
}
На данный момент я не ожидаю, чтобы было больше, чем определенное количество слов ... Мне, вероятно, понадобится лучшее решениечем это в ближайшем будущем, любая крутая идея будет приветствоваться.