Сохранение размера изображения пропорциональным
У меня есть контейнер View
и он имеет статическую высоту, скажем, 50:
container: {
width: '100%',
height: 50,
}
Теперь у этого контейнера есть один дочерний элемент, который принимает высоту всего родителя, устанавливая его высоту в 100%
:
child: {
height: 100%,
}
Я хочу, чтобы этот дочерний элемент был идеально квадратным, с шириной, равной его высоте, автоматически, поэтому, если завтра я изменит высоту родительского элемента на 60, тогда высота ребенка будет автоматически расти (из-за height: 100%
) но как я могу установить его ширину, чтобы она соответствовала автоматически? width: 'auto'
не имеет никакого эффекта..
Детская площадка: https://snack.expo.io/SkSWxPKbZ
3 ответа
aspectRatio: 1
делает трюк, как:
child: {
height: '100%',
aspectRatio: 1
}
Таким образом, ребенок всегда будет принимать 100% от высоты родителя, а его ширина будет в точности соответствовать его высоте.
Рабочий пример: https://snack.expo.io/SkWzrCYZ-
PlayGround: https://snack.expo.io/SkED1_YZ-
Это просто самый простой способ добиться этого. Я использовал константу для хранения высоты основного, поэтому ее можно использовать как ширину внутреннего вида.
Вы можете вычислить availableHeight динамически и установить ширину в то же значение:
constructor() {
super();
this.state = {
availableHeight: 0,
}
}
render() {
return (
<View style={styles.container}>
<View
style={{
flex: 1,
width: this.state.availableHeight,
}}
onLayout={(e) => {
const { height } = e.nativeEvent.layout;
this.setState({availableHeight: height});
}}>
</View>
</View>
)
}