当前位置: 首页 > 知识库问答 >
问题:

React Native:使用ScrollView时垂直居中

葛永丰
2023-03-14

我正在使用 React Native,一旦我引入了 ScrollView,我就很难保留元素的垂直居中。为了进行演示,我使用 React 原生游乐场创建了 3 个应用。所有示例都有 2 个页面,可以通过点击蓝色按钮来切换它们。

示例 1:

第一个示例显示了在第 2 页上垂直居中的块。发生这种情况是因为容器应用了以下样式:

flex: 1,
flexDirection: 'column',
justifyContent: 'center',

https://rnplay.org/apps/lb5wSQ

但是,一切换到第2页就有一个问题,因为页面的整个内容都不合适,所以我们需要一个ScrollView

示例 2

在此示例中,我将所有内容包装在滚动视图中。这允许页面2滚动,但现在我失去了页面1的垂直居中。

https://rnplay.org/apps/DCgOgA

示例 3

为了尝试恢复页面1的垂直居中,我将< code>flex: 1应用于ScrollView的< code > contentContainerStyle 。这修复了第1页的垂直居中,但是我不再能够一直向下滚动到第2页的底部。

https://rnplay.org/apps/LSgbog

如何解决这个问题,使我在第1页上的元素垂直居中,但仍能让ScrollView一直滚动到第2页的底部?

共有3个答案

田志尚
2023-03-14

有一个新的解决方案(不幸的是目前只有iOS)-我们可以在Scrollview上使用centerContentprop。

龙骏
2023-03-14

这是我的方法

使用带有flex:1的外部容器,则滚动视图需要具有{flexGrow:1,justifyContent:'center'}using

<View style={styles.mainContainer}>
  <ScrollView
    contentContainerStyle={{flexGrow : 1, justifyContent : 'center'}}>
      <View style={styles.scrollViewContainer}>
        //Put your stuff here, and it will be centered vertical
      </View>
  </ScrollView>
</View> 

样式:

const styles = StyleSheet.create({scrollView : {
height : Dimensions.get('window').height, }, mainContainer : {
flex : 1 }, scrollViewContainer : { }, })
薛欣荣
2023-03-14

我用flexGrow而不是flex解决了这个问题

<代码>

这使得内容容器可以拉伸以填充ScrollView,但不限制最大高度,因此当内容扩展到ScrollView的边界时,您仍然可以正确滚动

 类似资料:
  • 问题内容: 我怎么能垂直居中内的? 到目前为止,我的代码: 我已经尝试过“ top:50%”;和“ vertical-align:middle”;没有成功 编辑: 好的,所以已经讨论了很多。我也许已经开始了另一场小型的火焰战争。但是为了论证,那我该如何用一个表呢?到目前为止,我已经将CSS用于其他所有内容,所以这并不是说我没有尝试采用“良好做法”。 编辑: 内部div没有固定的高度 问题答案: 简

  • 本文向大家介绍如何垂直居中` `?相关面试题,主要包含被问及如何垂直居中` `?时的应答技巧和注意事项,需要的朋友参考一下 使用协助元素(这里是i),作为img的相邻元素,同为inline-block的两元素相邻时增加vertical-align: middle

  • 问题内容: 我正在尝试使用CSS的flexbox垂直居中放置项目;而且,我知道如何使用非供应商前缀的代码来做到这一点,但是即使使用供应商前缀,我也无法在Webkit(Chrome)中使用它。 我正在尝试垂直对齐#trigger中的跨度。 这是我的CSS: 有什么想法我做错了吗? 而且,如果您知道我正在使用的其他供应商前缀/版本的属性,请随时共享它们,以便它不仅可以在Webkit中使用。 问题答案:

  • 问题内容: 我有一个包含文本的div元素,并且我想将此div的内容垂直居中对齐。 这是我的div样式: 做这个的最好方式是什么? 问题答案: 您可以尝试以下基本方法: 但是,它仅适用于一行文本,因为我们将行的高度设置为与包含框元素相同的高度。 更通用的方法 这是垂直对齐文本的另一种方法。此解决方案适用于一行和多行文本,但仍需要一个固定高度的容器: CSS只是通过设置的line-height等于其高

  • 问题内容: 我正在尝试制作一个小的用户名和密码输入框。 我想问一下,如何垂直对齐div? 我所拥有的是: 如何使ID为Username和Form的div垂直对齐中心?我试着把: 在CSS中用于ID为Login的div,但似乎不起作用。任何帮助,将不胜感激。 问题答案: 现代浏览器中最好的方法是使用flexbox: 某些浏览器将需要供应商前缀。对于不支持Flexbox的较旧的浏览器(例如IE9及更低

  • 问题内容: 如何使用flexbox在容器内水平和垂直居中div。在下面的示例中,我希望每个数字都彼此相邻(按行),并水平居中。 问题答案: 我认为您想要以下内容。 你的元素应该是块级(而非)如果你想要的高度和顶部/底部填充,以正常工作。 另外,在上,将宽度设置为而不是。 您的属性很好。 如果您希望垂直居中于视口中,请为和分配100%的高度,然后将页边距清零。 请注意,需要一个高度才能看到垂直对齐效