React native 带有flex 1的ScrollView使其不可滚动
我试图在React native 带有flex 1的ScrollView使其不可滚动,react-native,flexbox,react-native-android,react-native-scrollview,React Native,Flexbox,React Native Android,React Native Scrollview,我试图在ScrollView上运行flex,只要ScrollView有flex:1,内部的滚动就不起作用。 这是expo fiddle(您可以运行此代码并使用它) 请注意,如果您从ScrollView中删除flex:1,它确实允许滚动,但随后您将失去灵活性(能够让红色容器向下推动上部框(ScrollView)),因此我必须在那里安装一个flex p、 我只在安卓上工作,还没有在iPhone上测试过(我不介意结果) 你知道我错过了什么吗?为什么ScrollView在具有flex:1时无法正常工作
ScrollView
上运行flex,只要ScrollView有flex:1
,内部的滚动就不起作用。
这是expo fiddle(您可以运行此代码并使用它)
请注意,如果您从ScrollView
中删除flex:1
,它确实允许滚动,但随后您将失去灵活性(能够让红色容器向下推动上部框(ScrollView)),因此我必须在那里安装一个flex
p、 我只在安卓上工作,还没有在iPhone上测试过(我不介意结果)
你知道我错过了什么吗?为什么ScrollView
在具有flex:1
时无法正常工作?
谢谢 我认为您的问题在于您告诉ScrollView使用flex=1来占用所有可用空间,但问题是ScrollView的工作方式不同。它会自动渲染其所有子对象,因此它与flex的工作方式不同。这与性能更好的普通ListView或FlatList不同 我相信这种零食解决了这个问题: 基本上,我得到设备的高度,并根据(屏幕高度-红色框的当前高度)将ScrollView设置为固定高度 这已经提供了如何做到这一点 但是这里有一个解释,为什么你不能用你的方法去做。
contentContainerStyle
中给出的样式是
应用于包装所有子视图的滚动视图内容容器
因此,当您将flex:1
应用于contentContainer
时,它会将ScrollView
的整个高度作为其父视图flex:1
您还可以模拟-
能够让红色容器向下推动上部箱子
通过将父对象添加到滚动视图
,并在父对象中应用样式
<View style={styles.root}>
<View style={{ flex: 1, borderColor: 'green', borderWidth: 5 }}>
<ScrollView>
<View style={styles.box1} />
<View style={styles.box2} />
<View style={styles.box1} />
</ScrollView>
</View>
<View style={{ height: this.state.height, backgroundColor: 'red' }}>
<TouchableOpacity onPress={() => this.setState({ height: this.state.height + 10 })}>
<Text>Click</Text>
</TouchableOpacity>
</View>
</View>
this.setState({height:this.state.height+10})}>
点击
尝试在scrollView内容容器样式中使用flexGrow:1而不是flex:1,如下所示
<ScrollView contentContainerStyle={{ flexGrow: 1, borderColor: 'green', borderWidth: 5 }}>
<View style={styles.box1} />
<View style={styles.box2} />
<View style={styles.box1} />
</ScrollView>
试试这个,它会100%解决你的问题
import React, { Component } from 'react';
import { AppRegistry, View,ScrollView } from 'react-native';
export default class AlignItemsBasics extends Component {
render() {
return (
// Try setting `alignItems` to 'flex-start'
// Try setting `justifyContent` to `flex-end`.
// Try setting `flexDirection` to `row`.
<View style={{ flex: 1,flexDirection: 'column' }}>
<View style={{ height: 50, backgroundColor: 'powderblue'}} />
<View style={{ flex: 1, backgroundColor: 'skyblue'}} >
<ScrollView>
<View style={{ flexDirection: 'column' , minHeight: 'fit-content'}} >
<View style={{ height:150, backgroundColor: 'red'}} />
<View style={{ minHeight: 'fit-content', backgroundColor: '#fe3222' }} />
<View style={{ height:150, backgroundColor: '#fff222'}} />
<View style={{ height:150, backgroundColor: '#555222'}} />
</View>
</ScrollView>
</View>
</View>
);
}
};
// skip this line if using Create React Native App
AppRegistry.registerComponent('AwesomeProject', () => AlignItemsBasics);
import React,{Component}来自'React';
从“react native”导入{AppRegistry,View,ScrollView};
导出默认类AlignItemsBasics扩展组件{
render(){
返回(
//尝试将'alignItems'设置为'flex start'
//尝试将'justifyContent'设置为'flex end'。
//尝试将'flexDirection'设置为'row'。
);
}
};
//如果使用CreateReact本机应用程序,请跳过此行
AppRegistry.registerComponent('AwesomeProject',()=>AlignItemsBasics);
最好的方法是将滚动视图包装到一个视图中并使用flex控制该视图,滚动视图将随之显示
这是一个小例子
<View style={{flex: 1, flexDirection: 'column',}}>
<View style={{flex:5, backgroundColor : 'green' }}>
<ScrollView style={{margin:50, backgroundColor : 'pink' }}>
<Text> Hello Scroll View </Text>
<Text> Hello Scroll View </Text>
<Text> Hello Scroll View </Text>
<Text> Hello Scroll View </Text>
<Text> Hello Scroll View </Text>
<Text> Hello Scroll View </Text>
</ScrollView>
</View>
<View style={{flex:1, backgroundColor : 'blue' }}>
<Text> Hello Static View </Text>
</View>
</View>
Hello滚动视图
Hello滚动视图
Hello滚动视图
Hello滚动视图
Hello滚动视图
Hello滚动视图
你好静态视图
如何在快餐店运行代码。。。也不确定,虽然我认为您需要将滚动视图
包装在视图
中,但您是否尝试将flex:1
添加到最外层的视图
?@LGSon是的,我尝试过,但仍然无法正常工作,无论哪种方式,我都会丢失flex或滚动。您为什么不能这样做。。。可能需要这样来解决这个问题:@Danny这是因为ScrollView内部的工作方式。请解释一下你想要完成什么。是否要在红色框上方显示框列表?什么东西现在不起作用?(注意:如果我点击红色框,在上一届世博会上什么也没发生)做得很好。我本来也打算采取同样的方法,但你抢先了我。这就是答案。我用这个解决了同样的问题。阅读更多关于flex grow的内容,你就会明白这一点。这是它的头儿,它拯救了这一天!这应该是公认的答案。工作完美,避免了额外的视图和不必要的逻辑