添加全屏背景图像的最佳方法是什么

IT技术 javascript react-native
2021-01-28 14:08:37

我想在视图中添加一个全屏图像,所以我写了这段代码

return (
    <View style={styles.container}>
        <Image source={require('image!egg')}  style={styles.backgroundImage}/>
    </View>
)

并将样式定义为

var styles = StyleSheet.create({
container: {
     flex: 1,
     justifyContent: 'center',
     alignItems: 'center',
     backgroundColor: '#F5FCFF',
     flexDirection: 'column',
},
     backgroundImage:{
     width:320,
     height:480,
   }
...

但是这样我应该如何找到实际的 iPhone 屏幕尺寸?

我见过一个 API 来访问像素密度,但对屏幕尺寸一无所知......

6个回答

(这已被弃用,现在您可以使用ImageBackground

我就是这样做的。主要的交易是摆脱静态的固定尺寸。

class ReactStrap extends React.Component {
  render() {
    return (
      <Image source={require('image!background')} style={styles.container}>
        ... Your Content ...
      </Image>
    );
  }
}

var styles = StyleSheet.create({
  container: {
    flex: 1,
    // remove width and height to override fixed static size
    width: null,
    height: null,
  }
};
这是最佳答案!
2021-03-29 14:08:37
谢谢!确保Image是您返回的第一个组件,即容器。起初,我不小心将Imagea嵌套在了View容器中。
2021-03-29 14:08:37
YellowBox.js:76 不推荐将 <Image> 与孩子一起使用,并且在不久的将来会出现错误。请重新考虑布局或使用 <ImageBackground> 代替。当我向 <Image> 添加内容时,会出现此警告。这真的很烦人。
2021-04-05 14:08:37
这实际上已被弃用。使用 ImageBackground 或(最佳)位置:绝对
2021-04-07 14:08:37
2021-04-14 14:08:37

您可以flex: 1<Image>元素使用样式以使其填满整个屏幕。然后,您可以使用其中一种图像调整大小模式让图像完全填充元素:

<Image source={require('image!egg')} style={styles.backgroundImage} />

风格:

import React from 'react-native';

let { StyleSheet } = React;

let styles = StyleSheet.create({
  backgroundImage: {
    flex: 1,
    resizeMode: 'cover', // or 'stretch'
  }
});

我很确定你可以摆脱<View>包装你的形象,这会奏效。

在为此苦苦挣扎了一段时间后,我发现最简单的方法是将Image组件包装在绝对定位中,View以允许背景图像出现在屏幕上的其他内容后面。
2021-03-16 14:08:37
重要编辑:<Image src=...>现在<Image source=...>
2021-03-16 14:08:37
既然支持 z-index,你会改变这个答案吗?
2021-03-17 14:08:37
很好,但图像正在拉伸并且在屏幕中启用了滚动
2021-03-18 14:08:37
是的,它有效,我已将 Image 元素移至最顶部并将其样式设置为 backgroundImage:{ justifyContent: 'center', alignItems: 'center', flex: 1, resizeMode: Image.resizeMode.contain, },谢谢
2021-04-09 14:08:37

注意:此解决方案是旧的。请参考 https://facebook.github.io/react-native/docs/images.html#background-image-via-nesting代替

试试这个解决方案。它是官方支持的。我刚刚测试过它并且运行完美。

var styles = StyleSheet.create({
  backgroundImage: {
    flex: 1,
    alignSelf: 'stretch',
    width: null,
  }
});

至于将其用作背景图像,只需执行以下操作。

<Image style={styles.backgroundImage}>
  <View>
    <Text>All your stuff</Text>
  </View>
</Image>
什么,这是官方支持的吗?
2021-03-20 14:08:37
仅供参考,图像组件在最新版本的 React (0.51.0) 中不能有子组件。这不再有效。
2021-03-22 14:08:37
alignSelfwidth这里有什么用
2021-03-25 14:08:37
2021-03-28 14:08:37
您正在将 <Image /> 拉伸到可用宽度,并且宽度需要为 null 才能使“拉伸”工作
2021-04-10 14:08:37

2018 年 3 月更新使用 Image 已弃用,使用 ImageBackground

  <ImageBackground 
          source={{uri: 'https://images.pexels.com/photos/89432/pexels-photo-89432.jpeg?h=350&dpr=2&auto=compress&cs=tinysrgb'}}
          style={{ flex: 1,
            width: null,
            height: null,
            }}
        >
       <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>Your Contents</Text>
       </View>

 </ImageBackground >
这是正确的,现在您必须使用 ImageBackground,不推荐使用 Image 作为容器。此处不需要作为容器查看,您可以仅使用 ImageBackground 作为主容器。
2021-03-25 14:08:37
2021-04-13 14:08:37

我使用 react-native version = 0.19.0 尝试了其中几个答案对 android 无济于事。

出于某种原因,我的样式表中的 resizeMode 无法正常工作?然而,当样式表有

backgroundImage: {
flex: 1,
width: null,
height: null,
}

并且,在 Image 标签中,我指定了 resizeMode:

<Image source={require('path/to/image.png')} style= {styles.backgroundImage} resizeMode={Image.resizeMode.sretch}>

它工作得很好!如上所述,您可以使用 Image.resizeMode.cover 或 contains 。

希望这可以帮助!