Bar*_*amo 22 javascript flexbox reactjs react-native
我正在尝试将图像放入其包含的视图中,以便我可以拥有无缝的图像网格.问题是,resizeMode='contain'
似乎适合屏幕的宽度或至少一些更高级别的容器,我需要图像以适应每个列表项的大小.
这是样式和结果网格的一个非常丑陋的例子:
风格:
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'blue'
},
item: {
flex: 1,
overflow: 'hidden',
alignItems: 'center',
backgroundColor: 'orange',
position: 'relative',
margin: 10
},
image: {
flex: 1
}
})
Run Code Online (Sandbox Code Playgroud)
布局:
<TouchableOpacity
activeOpacity={ 0.75 }
style={ styles.item }
>
<Image
style={ styles.image }
resizeMode='contain'
source={ temp }
/>
</TouchableOpacity>
Run Code Online (Sandbox Code Playgroud)
结果(带resizeMode='contain'
):
结果(带resizeMode='cover'
):
如您所见,cover
ed图像非常大,并且与整个屏幕一样宽,并且不适合立即包含的视图.
更新1:
通过对图像应用缩放变换并将其从中心缩小,我能够获得接近我正在寻找的结果:
变换:
transform: [{ scale: 0.55 }]
Run Code Online (Sandbox Code Playgroud)
小智 27
将尺寸设置为视图,并确保将图像的高度和宽度设置为"未定义",如下例所示:
<View style={{width: 10, height:10 }} >
<Image style= {{flex:1 , width: undefined, height: undefined}}
source={require('../yourfolder/yourimage')}
/>
</View>
Run Code Online (Sandbox Code Playgroud)
这将确保您的图像缩放并完美地适合您的视图.
saz*_*y4o 21
例如,如果您知道宽高比,则如果您的图像是方形的,则可以设置height
或width
来填充容器,并通过该aspectRatio
属性 设置另一个
如果要height
自动设置,请使用以下样式:
{
width: '100%',
height: undefined,
aspectRatio: 1,
}
Run Code Online (Sandbox Code Playgroud)
注意:height
必须undefined
Suj*_*eet 12
只是您需要像这样传递 resizeMode 以适应包含视图中的图像
<Image style={styles.imageStyle} resizeMode={'cover'} source={item.image}/>
const style = StyleSheet.create({
imageStyle: {
alignSelf: 'center',
height:'100%',
width:'100%'
},]
})
Run Code Online (Sandbox Code Playgroud)
cmc*_*des 12
任何想要他的图像在没有任何裁剪的情况下全屏显示的人(在纵向和横向模式下),使用这个:
image: {
flex: 1,
width: '100%',
height: '100%',
resizeMode: 'contain',
},
Run Code Online (Sandbox Code Playgroud)
我无法使用resizeMode
属性来运行示例Image
,但因为图像都是正方形,所以有一种方法可以使用窗口的尺寸和flexbox来完成.
设置flexDirection: 'row'
,flexWrap: 'wrap'
然后,只要它们都是相同的尺寸,它们都会排列.
我把它设置在这里
https://snack.expo.io/HkbZNqjeZ
"use strict";
var React = require("react-native");
var {
AppRegistry,
StyleSheet,
Text,
View,
Image,
TouchableOpacity,
Dimensions,
ScrollView
} = React;
var deviceWidth = Dimensions.get("window").width;
var temp = "http://thumbs.dreamstime.com/z/close-up-angry-chihuahua-growling-2-years-old-15126199.jpg";
var SampleApp = React.createClass({
render: function() {
var images = [];
for (var i = 0; i < 10; i++) {
images.push(
<TouchableOpacity key={i} activeOpacity={0.75} style={styles.item}>
<Image style={styles.image} source={{ uri: temp }} />
</TouchableOpacity>
);
}
return (
<ScrollView style={{ flex: 1 }}>
<View style={styles.container}>
{images}
</View>
</ScrollView>
);
}
});
Run Code Online (Sandbox Code Playgroud)
这对我有用,
<Image style={styles.imageStyle} resizeMode="cover" source={imageSource} />
const styles = StyleSheet.create({
imageStyle: {
width: undefined,
height: '100%',
aspectRatio: 1,
alignSelf: 'center',
},
});
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为这是因为您没有指定item
.
如果您只想连续显示 2 张图像,您可以尝试这样的操作,而不是使用 flex:
item: {
width: '50%',
height: '100%',
overflow: 'hidden',
alignItems: 'center',
backgroundColor: 'orange',
position: 'relative',
margin: 10,
},
Run Code Online (Sandbox Code Playgroud)
这对我有用,希望它有所帮助。
归档时间: |
|
查看次数: |
50715 次 |
最近记录: |