提问者:小点点

如何设置图像宽度为100%,高度为自动在反应原生?


我正在尝试在滚动视图中显示图像列表。宽度应该是100%,而高度应该是自动的,保持长宽比。

我所做的搜索指向了各种提供全屏背景样式的解决方案。

const styles = StyleSheet.create({
    image: {
        width: null,
        height: 300,
        resizeMode: 'cover'
    }
});

<ScrollView style={{flex: 1}}>
    <Image style={styles.image} source={require('../../../images/collection-imag1.png')}/>
    <Image style={styles.image} source={require('../../../images/collection-imag2.png')}/>
</ScrollView>

我尝试过各种宽度:null、高度:null、flex: 1、对齐自己等组合。上述解决方案几乎可以工作,除了高度不是动态的。图像的部分不可见。


共3个答案

匿名用户

因此,经过一段时间的思考,我能够在react-native图像中实现高度:自动。您需要知道图像的尺寸才能使此黑客工作。只需在任何图像查看器中打开您的图像,您就会在文件信息中获得图像的尺寸。作为参考,我使用的图像大小为541 x 362

第一次从react-native导入维度

import { Dimensions } from 'react-native';

然后你必须得到窗户的尺寸

const win = Dimensions.get('window');

现在计算比率为

const ratio = win.width/541; //541 is actual image width

现在为您的图像添加样式为

imageStyle: {
    width: win.width,
    height: 362 * ratio, //362 is actual height of image
}

匿名用户

“resizeMode”不是样式属性。应该像下面的代码一样移动到Image组件的Props

const win = Dimensions.get('window');

const styles = StyleSheet.create({
    image: {
        flex: 1,
        alignSelf: 'stretch',
        width: win.width,
        height: win.height,
    }
});

...
    <Image 
       style={styles.image}
       resizeMode={'contain'}   /* <= changed  */
       source={require('../../../images/collection-imag2.png')} /> 
...

图像的高度不会自动变,因为样式props中需要Image组件的宽度和高度。因此,您可以使用getSize()方法计算远程图像,如此答案,也可以计算静态图像的图像比例,如此答案。

有很多有用的开源库——

  • 反应-本机-自动-高度-图像
  • 反应-本机-全宽-图像
  • 反应-原生-适合-图像

匿名用户

如果您知道图像的aspectRatio(宽度/高度),我已经找到了宽度:“100%”,高度:“自动”的解决方案。

这是代码:

import { Image, StyleSheet, View } from 'react-native';

const image = () => (
    <View style={styles.imgContainer}>
        <Image style={styles.image} source={require('assets/images/image.png')} />
    </View>
);

const style = StyleSheet.create({
    imgContainer: {
        flexDirection: 'row'
    },
    image: {
        resizeMode: 'contain',
        flex: 1,
        aspectRatio: 1 // Your aspect ratio
    }
});

这是我在不使用onLayoutDimension计算的情况下使其工作的最简单方法。如果需要,您甚至可以将其包装在一个简单的可重用组件中。如果有人正在寻找简单的实现,请尝试一下。