如何将resizeMode设置为“ contain”的ImageBackground放在顶部?

时间:2019-03-08 10:57:43

标签: css react-native background-image

我目前正在使用以下代码在我的React Native应用上显示背景图片:

<ImageBackground 
   source={myImage} 
   style={{ width:'100%', height:'100%' }} 
   imageStyle={{resizeMode: 'contain'}}
>
....
</ImageBackground>

我不想拉伸图像,而resizeMode: 'contain'可以完美地完成这项工作。这样,图像不会覆盖我的所有屏幕,而只能覆盖其中的一部分,而这正是我想要实现的目标。

我的问题是,图像在上方与上面显示的代码垂直居中对齐,但我希望它停留在顶部。因此,它应该保持比例并保持在顶部。我尝试在imageStyle属性中使用position:'absolute'top:0,但是它不起作用。

我看到this question显然解释了我的相同问题,但没有为我的问题提供解决方案。

您有什么建议吗?

3 个答案:

答案 0 :(得分:1)

尝试一下:

import {Dimensions} from 'react-native'

    constructor(props) {
      super(props);
      this.state = { height: 0 };
    }

    componentDidMount(){
          Image.getSize(imgUrl, (srcWidth, srcHeight) => {
             const maxHeight = Dimensions.get('window').height; 
             const maxWidth = Dimensions.get('window').width;
             const ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight);
             this.setState({ height: srcHeight * ratio})
          })
    } 

    <ImageBackground 
       source={myImage} 
       style={{ flex:1 }} 
       resizeMode= 'contain'
       imageStyle={height: this.state.height, width:Dimensions.get('window').width}
    >
    ....
    </ImageBackground>

ImageBackgroundImage一样是道具,所以resizeMode是道具而不是风格
参见:https://facebook.github.io/react-native/docs/imagebackground

答案 1 :(得分:1)

我使用 static height 和 resizeMode cover 实现了类似的效果

<ImageBackground 
  style={{ flex: 1 }}
  imageStyle={{ height: 300 }}
  source={{ uri: entity.picture }}
  resizeMode="cover"
>
  ...
</ImageBackground>

答案 2 :(得分:0)

嘿,我真的没有得到您真正需要做的,试试这个

body{
  margin: 0;
  padding: 0;
  font-family: sans-serif;
  background: url(background.jpg) no-repeat;
  /* background-size: cover; */
}