React Native FlexBox:为啥添加`alignItems`会阻止孩子拥有100%的宽度?

Posted

技术标签:

【中文标题】React Native FlexBox:为啥添加`alignItems`会阻止孩子拥有100%的宽度?【英文标题】:React Native FlexBox: Why does adding `alignItems` prevent child from having 100% width?React Native FlexBox:为什么添加`alignItems`会阻止孩子拥有100%的宽度? 【发布时间】:2020-09-02 20:12:19 【问题描述】:

在我的 React Native 应用程序中,我有一个父 View,它包含一个包含 Text 元素的子 View。默认情况下,子视图的宽度会拉伸以填充父视图。但是如果我添加alignItems: 'center',子元素会移动到中心,但它的宽度也会缩小到适合它包含的文本的宽度。

这是一个小吃。取消评论 alignItems: 'center' 以查看差异:https://snack.expo.io/@gkeenley/alignitems-example

有人知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

孩子没有明确的宽度,所以它的宽度通常刚好足以包围它包含的文本,这就是您在将alignItems 设置为'center' 时看到的内容。您之前看到它占据整个宽度的原因是 alignItems 的默认值是 'stretch',这导致孩子的正常宽度无关紧要,而是被拉伸以占据所有空间。

如果您希望孩子在居中版本中更大,您可以给它一个明确的宽度:

child: 
  height: '100%',
  width: '50%',
  backgroundColor: 'red'

...或使用填充在文本周围添加一些额外的分隔符。

child: 
  height: '100%',
  padding: 5,
  backgroundColor: 'red'

【讨论】:

完美,谢谢!另一种在不缩小child 的情况下使文本居中的方法是将alignItems: center 设置为child 而不是parent

以上是关于React Native FlexBox:为啥添加`alignItems`会阻止孩子拥有100%的宽度?的主要内容,如果未能解决你的问题,请参考以下文章

为啥视图不显示在 react-native 中?

React Native开发之FlexBox代码+图解

React-native - 带有 flexbox 的 Pinterest 风格

React Native FlexBox布局

5分钟吃透React Native Flexbox

5分钟吃透React Native Flexbox