反应导航模态高度
React Navigation modal height
如何设置 React Navigation 模态视图的高度,使其出现后自下而上仅覆盖大约一半的屏幕,而下方的视图仍然可见?
更新: 我正在尝试创建一个类似于 App Store 购买模式的用户体验流程,其中某种 StackNavigator 嵌套在填充下半部分的模式中屏幕。
在您的堆栈导航器中,您可以设置这些选项:
mode: 'modal',
headerMode: 'none',
cardStyle:{
backgroundColor:"transparent",
opacity:0.99
}
并且在您的模态屏幕中:
class ModalScreen extends React.Component {
render() {
return (
<View style={{ flex: 1 ,flexDirection: 'column', justifyContent: 'flex-end'}}>
<View style={{ height: "50%" ,width: '100%', backgroundColor:"#fff", justifyContent:"center"}}>
<Text>Testing a modal with transparent background</Text>
</View>
</View>
);
}
}
也可以参考一下这个世博小吃https://snack.expo.io/@yannerio/modal that I've created to show how it works, or you could use React Native Modal
对于 react-navigation v3.x 你可以使用 prop transparentCard: true,你可以在这里看到更多细节:
下面是如何在 react-navigation
v3.x 中实现此目的的示例:
应用容器
const TestRootStack = createStackNavigator(
{
TestRoot: TestRootScreen,
TestModal: {
screen: TestModalScreen,
navigationOptions: {
/**
* Distance from top to register swipe to dismiss modal gesture. Default (135)
* https://reactnavigation.org/docs/en/stack-navigator.html#gestureresponsedistance
*/
gestureResponseDistance: { vertical: 1000 }, // default is 135 },
},
},
},
{
headerMode: 'none',
mode: 'modal',
transparentCard: true,
},
);
const AppContainer = createAppContainer(TestRootStack);
根屏幕
class TestRootScreen extends React.Component {
render() {
return (
<SafeAreaView style={styles.container}>
<Button title="Show Modal" onPress={() => this.props.navigation.navigate('TestModal')} />
</SafeAreaView>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'blue',
alignItems: 'center',
justifyContent: 'center',
},
});
模态屏幕
class TestModalScreen extends React.Component {
render() {
return (
<SafeAreaView style={styles.container}>
<View style={styles.innerContainer} />
</SafeAreaView>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'transparent',
justifyContent: 'flex-end',
},
innerContainer: {
position: 'absolute',
bottom: 0,
left: 0,
right: 0,
top: 100,
backgroundColor: 'red',
},
});
如果你想使用react native Modal你可以让父视图透明并在底部添加一个视图
<Modal
animationType="slide"
transparent={true}
visible={props.visible}
>
<View
style={{
backgroundColor:'transparent',
flex:1,
justifyContent:'flex-end'
}}>
<View
style={{
backgroundColor:'green',
height:'20%'
}}>
<Text>Hello World!</Text>
<TouchableHighlight
onPress={props.closeModal}>
<Text>Hide Modal</Text>
</TouchableHighlight>
</View>
</View>
</Modal>
如何设置 React Navigation 模态视图的高度,使其出现后自下而上仅覆盖大约一半的屏幕,而下方的视图仍然可见?
更新: 我正在尝试创建一个类似于 App Store 购买模式的用户体验流程,其中某种 StackNavigator 嵌套在填充下半部分的模式中屏幕。
在您的堆栈导航器中,您可以设置这些选项:
mode: 'modal',
headerMode: 'none',
cardStyle:{
backgroundColor:"transparent",
opacity:0.99
}
并且在您的模态屏幕中:
class ModalScreen extends React.Component {
render() {
return (
<View style={{ flex: 1 ,flexDirection: 'column', justifyContent: 'flex-end'}}>
<View style={{ height: "50%" ,width: '100%', backgroundColor:"#fff", justifyContent:"center"}}>
<Text>Testing a modal with transparent background</Text>
</View>
</View>
);
}
}
也可以参考一下这个世博小吃https://snack.expo.io/@yannerio/modal that I've created to show how it works, or you could use React Native Modal
对于 react-navigation v3.x 你可以使用 prop transparentCard: true,你可以在这里看到更多细节:
下面是如何在 react-navigation
v3.x 中实现此目的的示例:
应用容器
const TestRootStack = createStackNavigator(
{
TestRoot: TestRootScreen,
TestModal: {
screen: TestModalScreen,
navigationOptions: {
/**
* Distance from top to register swipe to dismiss modal gesture. Default (135)
* https://reactnavigation.org/docs/en/stack-navigator.html#gestureresponsedistance
*/
gestureResponseDistance: { vertical: 1000 }, // default is 135 },
},
},
},
{
headerMode: 'none',
mode: 'modal',
transparentCard: true,
},
);
const AppContainer = createAppContainer(TestRootStack);
根屏幕
class TestRootScreen extends React.Component {
render() {
return (
<SafeAreaView style={styles.container}>
<Button title="Show Modal" onPress={() => this.props.navigation.navigate('TestModal')} />
</SafeAreaView>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'blue',
alignItems: 'center',
justifyContent: 'center',
},
});
模态屏幕
class TestModalScreen extends React.Component {
render() {
return (
<SafeAreaView style={styles.container}>
<View style={styles.innerContainer} />
</SafeAreaView>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'transparent',
justifyContent: 'flex-end',
},
innerContainer: {
position: 'absolute',
bottom: 0,
left: 0,
right: 0,
top: 100,
backgroundColor: 'red',
},
});
如果你想使用react native Modal你可以让父视图透明并在底部添加一个视图
<Modal
animationType="slide"
transparent={true}
visible={props.visible}
>
<View
style={{
backgroundColor:'transparent',
flex:1,
justifyContent:'flex-end'
}}>
<View
style={{
backgroundColor:'green',
height:'20%'
}}>
<Text>Hello World!</Text>
<TouchableHighlight
onPress={props.closeModal}>
<Text>Hide Modal</Text>
</TouchableHighlight>
</View>
</View>
</Modal>