React-native阴影没有出现

smu*_*uvv 20 shadow react-native

我试图在我的观点下面留下一个阴影,从我在网上发现它应该很简单:

    shadowOffset: { width: 10, height: 10 },
    shadowColor: 'black',
    shadowOpacity: 1.0,
Run Code Online (Sandbox Code Playgroud)

但问题是阴影根本没有出现.

这是我的组件

      <View style={styles.shadow}>
        <View style={styles.box} >
          <View style={styles.ListComponent}>
            <Text style={styles.itemText}>Livestream</Text>
          </View>
        </View>
      </View>
Run Code Online (Sandbox Code Playgroud)

在我的StyleSheet中:

const styles = StyleSheet.create({
   shadow: {
   shadowOffset: { width: 10, height: 10 },
   shadowColor: 'black',
   shadowOpacity: 1.0
},
Run Code Online (Sandbox Code Playgroud)

有什么理由或有什么我错过了吗?

Tho*_*der 43

影子是否适用于IO?Android和IOS工作≠React-Native.对于android,它适用于提升.

const styles = StyleSheet.create({
shadow: {
  shadowOffset: { width: 10, height: 10 },
  shadowColor: 'black',
  shadowOpacity: 1,
  elevation: 3,
  // background color must be set
  backgroundColor : "#0000" // invisible color
}
Run Code Online (Sandbox Code Playgroud)

否则,尝试为阴影组件设置背景颜色:)

  • [请注意,如果容器上有溢出:隐藏设置,则不会出现阴影](https://github.com/facebook/react-native/issues/449) (7认同)
  • [无背景颜色](https://www.hostingpics.net/viewer.php?id=677954Capturedecran20170704a165937.png)|| [使用背景颜色](https://www.hostingpics.net/viewer.php?id=320071Capturedecran20170704a170010.png)您必须设置backgroundColor才能启用高程.它将是整个<View>的颜色,但你可以为subView设置另一个:) (3认同)
  • @Eran 感谢您的提示。去除溢出:隐藏使阴影出现。 (2认同)

Gol*_*Jer 9

对于iOS,提升zIndex你的外表<View>

const styles = StyleSheet.create({  
 shadow: {  
  shadowOffset: { width: 10, height: 10 },  
  shadowColor: 'black',  
  shadowOpacity: 1,  
  elevation: 3,  
  zIndex:999,  
}  
Run Code Online (Sandbox Code Playgroud)

  • 我从事 iOS 图形编程多年,可能已经有了答案。视图在其边界处进行剪辑,因此要显示阴影,通常必须使用子视图,在包含阴影的父视图上关闭剪辑,但然后继续对没有阴影的视图进行剪辑。这是因为 ShadowRadius 超出了裁剪范围。这对于 React 团队来说可能是一个相当大的挑战,因为它的行为并不符合预期,至少在我的例子中是这样。无论阴影是否忽略剪切,该决定的双方都会产生副作用 (2认同)

Lor*_*ley 9

正如一些评论指出的那样,如果您需要overflow: 'hidden'. (例如具有圆形边缘和全出血图像的卡片。)

一个方便的方法是在没有backgroundColor设置的情况下向父容器添加阴影。这是由于这个问题https://github.com/facebook/react-native/issues/10049#issuecomment-366426897导致孩子继承没有背景的父视图的阴影。(当它影响多个孩子时,它看起来很奇怪。)

  • 添加一个带有阴影且没有backgroundColor设置的父容器。
  • 有单个子视图一个backgroundColor
    <View // Parent
      style={{
        flex: 1,
        // No backgroundColor
        shadowColor: '#000',
        shadowOffset: {width: 0, height: 1},
        shadowOpacity: 0.8,
        shadowRadius: 2
      }}
    >
      <View // Card
        style={{
          flex: 1,
          borderRadius: 10,
          // To round image corners
          overflow: 'hidden',
          borderColor: '#999',
          borderWidth: 0.5,
          // https://github.com/facebook/react-native/issues/10049#issuecomment-366426897
          backgroundColor: '#FFF',
          // Android shadow
          elevation: 4
        }}
      >
        <Image // Content
          style={{
            height: '50%',
            width: '100%',
            alignSelf: 'center',
            alignItems: 'center',
            justifyContent: 'center'
          }}
          source={{
            uri: 'https://yourimageurl.com/image.jpg'
          }}
          resizeMode="cover"
        />
      </View>
    </View>
Run Code Online (Sandbox Code Playgroud)

比较阴影属性


小智 8

我也想在我的 Android 应用程序中的视图下方有一个阴影。所以我发现的技巧是:

对于IOS:

const styles = StyleSheet.create({
    shadow: {
      shadowOffset: { width: 0, height: 2 },
      shadowColor: '#000',
      shadowOpacity: 0.2
    }
});
Run Code Online (Sandbox Code Playgroud)

对于安卓:

const styles = StyleSheet.create({
    shadow: {
        elevation: 5
    }
});
Run Code Online (Sandbox Code Playgroud)

如果您正在处理 UI 元素,我建议您查看NativeBase站点。就造型而言,他们让生活变得轻松。


Mic*_* M. 5

我通过添加我要应用阴影overflow: 'visible'的样式属性来解决这个问题。Image

image: {
    overflow: 'visible',
    width: 300,
    height: 200,
    borderRadius: 4,
    shadowOffset: { width: 0, height: 2 },
    shadowColor: '#000',
    shadowOpacity: 0.2
  }
Run Code Online (Sandbox Code Playgroud)