反应原生儿童视图 justifyContent 属性不起作用

Posted

技术标签:

【中文标题】反应原生儿童视图 justifyContent 属性不起作用【英文标题】:react native children view justifyContent property not working 【发布时间】:2022-01-09 11:51:39 【问题描述】:

我正在尝试使用 expo 在 react native 中对齐项目,但是在对齐父视图中的项目后,子视图 justifyContent 无法正常工作。例如:

<View>
  <View style= borderBottomColor: 'black',borderBottomWidth: 3>
    <View style=flexDirection:'row',justifyContent:'space-between'>
      <Text style= color: "#6B35E2">Name</Text>
      <Text style= fontWeight: 'bold',color: "#6B35E2">Nico</Text>
    </View>
   </View>
   <View style=alignSelf:'flex-end'>
    <Icon
      name="fingerprint"
      iconStyle=styles.iconRight
    />
  </View>
</View>

渲染following image。该图标出现在底部边框下方,我需要它位于第二个文本的右侧。重要的是要注意底部边框不能到达图标。它必须在第二个文本结束。因此,我尝试将flexDirection:row 应用于父视图,如下所示:

<View style=flexDirection: "row">
  <View style= borderBottomColor: 'black',borderBottomWidth: 3>
    <View style=flexDirection:'row',justifyContent:'space-between'>
      <Text style= color: "#6B35E2">Name</Text>
      <Text style= fontWeight: 'bold',color: "#6B35E2">Nico</Text>
    </View>
  </View>
  <View style=alignSelf:'flex-end'>
    <Icon
      name="fingerprint"
      iconStyle=styles.iconRight
    />
  </View>
</View>

很遗憾,it does not render correctly。图标如预期一样位于右侧,底部边框刚刚结束,但应用于子 View 的 justifyContent:space-between 属性不再起作用。有任何想法吗?这是带有expected result 的图像。重要的是底部边框不能在图标下方,它必须在之前结束。

【问题讨论】:

发布预期结果的图像/屏幕截图。 已在帖子中添加! 【参考方案1】:

如果您希望icon 位于NameNico 的同一行,则需要将Icon 组件放在NameNico 的同一行内。

<View style=flexDirection: "row">
  <View style=styles.futBorder>
    <View style=flexDirection:'row',justifyContent:'space-between'>
      <Text style=styles.placeholderText>Name</Text>
      <Text style=styles.dataText>Nico</Text>
      <View style=alignSelf:'flex-end'>
        <Icon
          name="fingerprint"
          iconStyle=styles.iconRight
        />
      </View>
    </View>
  </View>
</View>

这样会将 Nico 放在行的中间。您也可以像这样在一行中创建 2 行:

<View style=flexDirection:'row',justifyContent:'space-between'> /* parent row */
  <View style=flexDirection: 'row'> /* child row */
      <Text style=styles.placeholderText>Name</Text>
      <Text style=styles.dataText>Nico</Text>
  </View>
  <View style=alignSelf:'flex-end'>
    <Icon
      name="fingerprint"
      iconStyle=styles.iconRight
    />
  </View>
</View>

然后如果需要你可以调整宽度

【讨论】:

很抱歉,但遗憾的是您的回答并没有达到预期的效果。第一个渲染屏幕左侧的所有内容,第二个渲染压缩在一起的两个文本标签。 @NICOLÁSANTONIOPINOLEVA 就像我在最后所说的那样,“如有必要,您可以调整宽度”。使用检查查看您的元素大小,如果您使用的是 chrome,只需按 ctrl + shift + c 然后将鼠标移过 是的,但这意味着我每次想使用该视图时都必须手动调整。【参考方案2】:

这个想法是有一个parent 视图和flexDirectionrow。然后在父视图内部会有两个视图-

1.) 使用flex: 1flexDirection : 'row'justifyContent: 'space-between' 的第一个视图

2.) Second View 没有任何样式,只是一个简单的视图。

我为此创建了一个Snack。

你可以这样做

<View style=styles.parentView>
  <View style=styles.firstRowView>
    <Text>Name</Text>
    <Text>Nico</Text>
  </View>

  <View style=styles.secondRow>
    <Ionicons name="finger-print" size=24 color="black" />
  </View>
</View>

样式将是

parentView: 
  flexDirection: 'row',
,
firstRowView: 
  flex: 1,
  flexDirection: 'row',
  justifyContent: 'space-between',
  borderBottomColor: 'black',
  borderBottomWidth: 2,
,
secondRow: ,

【讨论】:

就是这样!非常感谢 乐于助人。如果答案解决了您的问题,请考虑接受并投票。

以上是关于反应原生儿童视图 justifyContent 属性不起作用的主要内容,如果未能解决你的问题,请参考以下文章

反应原生:不透明视图中的透明视图

反应原生在视图的一侧添加边框

将孩子包裹在视图中反应原生

打字稿扩展反应原生视图组件

反应原生相机视图

javascript 反应原生视图