React Native文档说RN应该使用Navigator来创建模态(https://facebook.github.io/react-native/docs/modal.html#content)。
如何在不使用Modal的情况下使用Navigator创建透明模式?我希望用户在后台查看当前页面。谢谢。
答案 0 :(得分:2)
要回答有关透明模态的问题,可以使用rgba背景颜色,例如rgba(0,0,0,0.5),并将alpha传递给颜色的最后一个参数:rgba(r, g,b,alpha)。
就导航器而言,您可以使用导航器的Navigator.SceneConfigs.FloatFromBottom参数创建模态,将模态导航器放置在另一个导航器的场景中。有一个很好的帖子,其中有here的例子。类似的东西:
this.props.navigator.push({
title: 'title',
sceneConfig: Navigator.SceneConfigs.FloatFromBottom,
component: component,
navigationBar: <NavigationBar
title="Initial View"/>,
passProps: {}
})
我创建了一个透明背景here的示例项目,并将代码放在下面。我希望这有帮助!
https://rnplay.org/apps/pHqjhQ
'use strict';
var React = require('react-native');
var {
Modal,
StyleSheet,
SwitchIOS,
Text,
TouchableHighlight,
View,
AppRegistry,
} = React;
exports.displayName = (undefined: ?string);
exports.framework = 'React';
exports.title = '<Modal>';
exports.description = 'Component for presenting modal views.';
var Button = React.createClass({
getInitialState() {
return {
active: false,
};
},
_onHighlight() {
this.setState({active: true});
},
_onUnhighlight() {
this.setState({active: false});
},
render() {
var colorStyle = {
color: this.state.active ? '#fff' : '#000',
};
return (
<TouchableHighlight
onHideUnderlay={this._onUnhighlight}
onPress={this.props.onPress}
onShowUnderlay={this._onHighlight}
style={[styles.button, this.props.style]}
underlayColor="#a9d9d4">
<Text style={[styles.buttonText, colorStyle]}>{this.props.children}</Text>
</TouchableHighlight>
);
}
});
var ModalExample = React.createClass({
getInitialState() {
return {
animated: true,
modalVisible: false,
transparent: true,
};
},
_setModalVisible(visible) {
this.setState({modalVisible: visible});
},
render() {
var modalBackgroundStyle = {
backgroundColor: this.state.transparent ? 'rgba(0, 0, 0, 0.5)' : '#f5fcff',
};
return (
<View>
<Modal
animated={this.state.animated}
transparent={this.state.transparent}
visible={this.state.modalVisible}>
<View style={[styles.container, modalBackgroundStyle]}>
<View style={[styles.innerContainer]}>
<Button
onPress={this._setModalVisible.bind(this, false)}
style={styles.modalButton}>
Close
</Button>
</View>
</View>
</Modal>
<View style={{ marginTop:60 }}>
<Button onPress={this._setModalVisible.bind(this, true)}>
SHOW MODAL
</Button>
</View>
</View>
);
},
});
AppRegistry.registerComponent('ModalExample', () => ModalExample);
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
padding: 20,
},
innerContainer: {
borderRadius: 10,
alignItems: 'center',
},
button: {
borderRadius: 5,
flex: 1,
height: 44,
alignSelf: 'stretch',
justifyContent: 'center',
overflow: 'hidden',
},
buttonText: {
fontSize: 18,
margin: 5,
textAlign: 'center',
},
modalButton: {
marginTop: 10,
},
});
答案 1 :(得分:1)
要回答更新的问题,您需要做的就是将configureScene更改为以下内容:
configureScene(route, routeStack){
if(route.type == 'Modal') {
return Navigator.SceneConfigs.FloatFromBottom
}
return Navigator.SceneConfigs.PushFromRight
}
然后,通过&#39; Modal&#39;当想要一个模态时:
_navigate(name, type='Normal') {
this.props.navigator.push({
component: Home,
passProps: {
name: name
},
type: type
})
}
设置了一个示例here。
答案 2 :(得分:0)
虽然这不适用于您的情况,因为我使用的是Modal
,但我只是想告诉我如何实现透明背景:
render
的{{1}}方法中,传递Modal
prop
transparent={true}
添加一个View
子项(将所有其他内容放入此modal
)并使用View
将style
应用于backgroundColor = 'rgba(r, g, b, a)'
。此处a
指的是您在后台想要的 alpha或不透明度 React-Native v0.46.4
参见链接: