摘要:在本教程中,您将学习如何使用 Flexbox 模型在您的移动应用程序中排列组件。
React Native 使用 Flexbox 布局算法为组件创建布局。React Native 中的 Flexbox 与 Web 中的 Flexbox 类似,但有一些细微的差异
| 功能 | React Native | Web |
|---|---|---|
| display 属性 | 隐式包含 display: 'flex' | 必须显式指定 display: flex |
| 默认 flex 方向 | 默认值为列flexDirection: 'column' | 默认值为行flex-direction: row |
| Flex 属性 | 接受一个值flex: flex-basis | 一到三个值flex: flex-grow flex-shrink flex-basis |
Flex 容器和项目
当组件具有 display: 'flex' 时,它将成为一个 flex 容器。所有直接子元素将成为 flex 项目

例如
<View style={{ display: 'flex'}}>
<Text>JS</Text>
<Text>React</Text>
<Text>React Native</Text>
</View>Code language: HTML, XML (xml)在本例中,View 是一个 flex 容器,Text 组件是 flex 项目

请注意,只有 flex 容器的直接子元素是 flex 项目,而间接子元素组件不是。例如
<View style={{ display: 'flex'}}>
<Pressable>
<Text>JS</Text>
</Pressable>
<Pressable>
<Text>React</Text>
</Pressable>
<Pressable>
<Text>React Native</Text>
</Pressable>
</View>Code language: HTML, XML (xml)在本例中,Pressable 组件是 flex 项目,但 Text 组件不是,因为它们是 View 组件的间接子元素

在 React Native 中,以下组件默认使用 flexbox 布局。这意味着您无需显式指定 display: 'flex'
- View
- ScrollView
- SafeAreaView
- FlatList
- SectionList
- VirtualizedList
Flex 方向
Flex 布局使用两个隐式轴:主轴和交叉轴。
如果 flexDirection 设置为 'column',则主轴为从上到下,交叉轴为从左到右

如果 flexDirection 设置为 'row',则主轴为从左到右,交叉轴为从上到下

要有效地使用 Flexbox,您通常会结合使用 alignItems 和 flexDirection 属性。
alignItems
alignItems 在 flex 容器的交叉轴上对齐单个 flex 项目。alignItems 属性接受以下值
- stretch(默认)
- flex-start
- flex-end
- center
- baseline
stretch
alignItems stretch 将在交叉轴上拉伸所有 flex 项目。请注意,alignItems 默认值为 stretch

flex-start
当 alignItems 设置为 flex-start 时,它会将 flex 项目对齐到 flex 容器的交叉轴的开头

flex-end
如果您将 alignItems 设置为 flex-end,它会将 flex 项目对齐到 flex 容器的交叉轴的末尾

center
alignItems center 将 flex 项目放置在交叉轴的中心

以下程序说明了 alignItems
baseline
alignItems baseline 将在 flexDirection 设置为 'row' 时,将 flex 项目沿同一基线对齐

以下程序说明了 alignItems baseline
justifyContent
justifyContent 将 flex 项目作为一个组(不像 alignItems 那样是单独的项目)沿 flex 容器的主轴对齐。
justifyContent 接受以下值之一
flex-startflex-endspace-betweenspace-evenlyspace-aroundcenter
以下应用程序说明了 justifyContent 的工作原理
flex-start
justifyContent flex-start 将 flex 项目作为一个组对齐到 flex 容器主轴的开头。

flex-end
justifyContent flex-end 将 flex 项目作为一个组对齐到 flex 容器主轴的末尾。

center
justifyContent center 将 flex 项目作为一个组对齐到 flex 容器主轴的中心。

space-between
justifyContent space-between 在 flex 容器的主轴上均匀地分布 flex 项目之间的空间

space-evenly
justifyContent space-evenly 在 flex 容器的主轴上以相等的空间排列 flex 项目,包括开始和结束。

space-around
justifyContent space-around 在 flex 容器的主轴上隔开 flex 项目,将剩余的空间分布在 flex 项目周围。

下表说明了 space-between、space-around 和 space-evenly 之间的区别
| 属性 | 描述 | 视觉布局(垂直) |
|---|---|---|
space-between | 在 flex 项目之间分配空间。开头和结尾没有空间。 | | 项目 1 | — 空间 — | 项目 2 | — 空间 — | 项目 3 | |
space-around | 在 flex 项目周围分配空间。在每个 flex 项目之前、之间和之后都有相等的空间。开始/结束空间是 flex 项目之间空间的一半。 | — 1/2 空间 — | 项目 1 | — 空间 — | 项目 2 | — 空间 — | 项目 3 | — 1/2 空间 — |
space-evenly | 在 flex 项目之间均匀地分配空间。每个 flex 项目之间都有相等的空间,包括开始和结束。 | — 空间 — | 项目 1 | — 空间 — | 项目 2 | — 空间 — | 项目 3 | — 空间 — |
总结
- React Native 使用 flexbox 布局来排列组件。
- 使用
alignItems在 flex 容器的交叉轴上对齐 flex 项目。 - 使用
flexDirection在 flex 容器的主轴上对齐 flex 项目。