React-Native,滚动视图不滚动

Joe*_*cio 27 react-native

当我像下面的例子一样包装内容时,它会滚动完美...

return(
    <ScrollView>
        <Text> TEST </Text>
        <Text> TEST </Text>
        <Text> TEST </Text>
        <Text> TEST </Text>
        ...
    </ScrollView>
);
Run Code Online (Sandbox Code Playgroud)

但是,每当我将它包装在另一个视图中时,它都不会滚动.

return(
    <View>
        <ScrollView>
            <Text> TEST </Text>
            <Text> TEST </Text>
            <Text> TEST </Text>
            <Text> TEST </Text>
            ...    
        </SCrollView>
    </View>
);
Run Code Online (Sandbox Code Playgroud)

有没有某种解决方法.我试图将导航栏标题放在所有内容之上,但实际上无法弄明白.

fre*_*ett 37

如果您ScrollView位于处理触摸(等)的内容中PressableTouchableWithoutFeedback那么您需要停止将触摸事件传播到该父处理程序,否则将ScrollView不会处理触摸事件,因此不会滚动。

onStartShouldSetResponder={() => true}这可以通过将子元素包装在一个本身处理触摸事件的元素中来完成Pressable(例如):

return (
  <ScrollView>
    <Pressable>
      <Text>This is scrollable</Text>
    <Pressable>
    <Pressable>
      <Text>As is this</Text>
    <Pressable>
  </ScrollView>
);
Run Code Online (Sandbox Code Playgroud)

  • 添加 `&lt;Pressable&gt;` 对我来说很有效! (3认同)

gra*_*n33 33

这是一个错字:你的关键ScrollView标签是: </SCrollView>而不是</ScrollView> 你需要为View容器添加一个样式,所以你的代码必须是这样的:

return(
  <View style={{flex: 1}}>
    <ScrollView>
      <Text> TEST </Text>
      <Text> TEST </Text>
      <Text> TEST </Text>
      <Text> TEST </Text>
      ...    
    </ScrollView>
  </View>
);
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是不完整的。工作滚动视图的要求似乎是外部视图上的 flex:1 和滚动视图的 contentContainerStyle 上的 flexGrow:1 。 (7认同)
  • 不适用于Android,我在这里测试了几乎所有方法 (4认同)
  • 添加flex:1确实修复了它!谢谢.这应该是接受的答案 (2认同)

leo*_*o7r 14

尝试添加style={{flex:1}}<View><ScrollView>组件.您的代码也有拼写错误:</SCrollView>第9行.示例代码如下所示:

<View style={{backgroundColor:'white', flex:1}}>
    <NavigationBar title="Title" />
    <ScrollView style={{flex:1, backgroundColor:'white'}}>
            <View style={{flex:1,justifyContent:'center'}}>
                <RegisterForm />
            </View>
    </ScrollView>
</View>
Run Code Online (Sandbox Code Playgroud)

  • 在最新的 React 版本中,你不能使用“style”,只能使用“contentContainerStyle” (4认同)

Eva*_*oky 10

另一种解决方案是在父视图容器中添加高度属性。在根据屏幕高度计算高度时,这有时效果很好。

render () {
  const screenHeight = Dimensions.get('window').height

  return(
    <View style={{height: screenHeight}}>
      <ScrollView>
        <Text> TEST </Text>
        <Text> TEST </Text>
        <Text> TEST </Text>
        <Text> TEST </Text>
           ...    
      </ScrollView>
    </View>
  )
}
Run Code Online (Sandbox Code Playgroud)


小智 8

尝试下一个代码:

<ScrollView contentContainerStyle={{ flexGrow: 1 }}>
  <Text> TEST </Text>
  <Text> TEST </Text>
  <Text> TEST </Text>
  <Text> TEST </Text>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

  • 如果有人将其与“contentContainerStyle={{ flexGrow: 1, flex: 1 }}”一起使用,请删除“flex: 1”。这就是使我的视图无法滚动的原因。 (5认同)
  • 来这里多次寻找解决方案,每次这个答案都对我有帮助。谢谢 (2认同)

EJ *_*yer 5

我已经尝试了所有这些解决方案,但没有一个有效。然后我完全重新启动了应用程序和 Metro 服务器,一切正常。