代码之家  ›  专栏  ›  技术社区  ›  Tj3n

如何收缩或强制行中组件之间的高度相等

  •  0
  • Tj3n  · 技术社区  · 6 年前

    我是RN的新手,我在处理高度优先权涉及的图像方面有困难,我似乎找不到解决的方法。

    styles.itemDetails ).

    图像总是增长到其图像固有高度,如果我使用 aspectRatio 它忽略了 resizeMode 属性,并且不会增长到可用空间。

    enter image description here

    组成部分:

        <View style={styles.item}>
          <Image style={styles.itemImg} source={source} />
          <View style={styles.itemDetails}>
            <Text>{poi.name}</Text>
            <Text>{poi.conciseDescription}</Text>
          </View>
        </View>
    

    风格:

    const styles = StyleSheet.create({
      item: {
        marginTop: 8,
        marginHorizontal: 8,
        borderRadius: 8,
        backgroundColor: '#E5E5E5',
        flexDirection: 'row',
      },
      itemImg: {
        flex: 1,
        borderTopLeftRadius: 8,
        borderBottomLeftRadius: 8,
        resizeMode: 'cover',
      },
      itemDetails: {
        flex: 2,
        margin: 16,
        backgroundColor: 'green',
      },
      itemTitle: {
        fontSize: 22,
      },
    });
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   aseferov    6 年前

    您可以使用onLayout事件获取itemDetails高度,并将其设置为图像高度

    const [imageHeight, setImageHeight] = useState(0)
    
    <View style={styles.item}>
      <Image style={[styles.itemImg, {height: imageHeight}]} source={source} />
      <View 
           style={styles.itemDetails} 
           onLayout={e => { setImageHeight(e.nativeEvent.layout.height) }}
      >
        <Text>{poi.name}</Text>
        <Text>{poi.conciseDescription}</Text>
      </View>
    </View>
    
        2
  •  0
  •   Eddy N.    6 年前

    尝试将itemImg设置为1em:

    img {height: 1em;}
    <div>
      <img src="http://www.w3.org/html/logo/downloads/HTML5_Logo_128.png" /> Your Text
    </div>

    如果不起作用,可以尝试将父元素“item”设置为 inline-flex 和/或删除 flex: 1, .