J'ai NavigatorIOS sous Navigator et je voudrais masquer la barre de navigation de Navigator pour pouvoir utiliser la barre de NavigatorIOS. Y a-t-il un moyen de faire ça?
Ceci est capture d'écran que j'ai vu. J'ai besoin de backend de NavigatorIOS ..
La structure que je veux construire est la suivante:
├── NavigatorRoute1
│ ├── NavigatorIOSRoute1
│ ├── NavigatorIOSRoute2
│ └── NavigatorIOSRoute3
└── NavigatorRoute2
Le code que j'ai est le ci-dessous. (Essentiellement obtenu à partir d’exemples UIExplore.
render: function(){
return (
<Navigator
initialRoute={ROUTE_STACK[this.getInitialRouteIndex()]}
initialRouteStack={ROUTE_STACK}
style={styles.container}
renderScene={this.renderScene}
navigationBar={
<Navigator.NavigationBar
routeMapper={NavigationBarRouteMapper}
style={styles.navBar}
/>
}
/>
);
}
render: function(){
var nav = this.props.navigator;
return (
<NavigatorIOS
style={styles.container}
ref="nav"
initialRoute={{
component: UserSetting,
rightButtonTitle: 'Done',
title: 'My View Title',
passProps: {nav: nav},
}}
tintColor="#FFFFFF"
barTintColor="#183E63"
titleTextColor="#FFFFFF"
/>
);
}
J'ai ajouté une fonction permettant de modifier l'état et de gérer le rendu de Navigator, puis de transmettre l'accessoire au composant afin de modifier l'état.
hideNavBar: function(){
this.setState({hideNavBar: true});
},
render: function(){
if ( this.state.hideNavBar === true ) {
return (
<Navigator
initialRoute={ROUTE_STACK[0]}
initialRouteStack={ROUTE_STACK}
renderScene={this.renderScene}
/>
);
}else{
return (
<Navigator
initialRoute={ROUTE_STACK[this.getInitialRouteIndex()]}
initialRouteStack={ROUTE_STACK}
style={styles.container}
renderScene={this.renderScene}
navigationBar={
<Navigator.NavigationBar
routeMapper={NavigationBarRouteMapper}
style={styles.navBar}
/>
}
/>
);
}
}
et
render: function(){
var hideNavBar = this.props.hideNavBar;
return (
<NavigatorIOS
style={styles.container}
initialRoute={{
component: UserSetting,
rightButtonTitle: 'Done',
title: 'My View Title',
passProps: {hideNavBar: hideNavBar},
}}
tintColor="#FFFFFF"
barTintColor="#183E63"
titleTextColor="#FFFFFF"
/>
);
}
Dans votre classe de navigateur, il semble que vous passiez dans une barre de navigation. Vous pouvez ajouter une logique à transmettre dans Navigator.NavigationBar ou dans votre barre NavigatorIOS en fonction de ce que vous souhaitez utiliser. Pour ce faire, vous devez spécifier une variable d'état dans Navigator que vous souhaitez mettre à jour lorsque vous souhaitez que la barre soit modifiée.
J'ai résolu ce problème en définissant une barre de navigation personnalisée pouvant inspecter l'itinéraire actuel. Ressemblerait à quelque chose comme ceci:
class NavigationBar extends Navigator.NavigationBar {
render() {
var routes = this.props.navState.routeStack;
if (routes.length) {
var route = routes[routes.length - 1];
if (route.display === false) {
return null;
}
}
return super.render();
}
}
En utilisant votre exemple:
render: function(){
return (
<Navigator
initialRoute={{
component: UserSetting,
rightButtonTitle: 'Done',
title: 'My View Title',
display: false,
}}
style={styles.container}
renderScene={this.renderScene}
navigationBar={
<NavigationBar
routeMapper={NavigationBarRouteMapper}
style={styles.navBar}
/>
}
/>
);
}
Parce que certaines anciennes méthodes sont obsolètes, j'ai utilisé stacknavigator. Cela fonctionne pour moi, si vous utilisez StackNavigator.
static navigationOptions = { title: 'Welcome', header: null };
N'hésitez pas à contacter, le cas échéant.
J'ai fait ça:
Dashboard:{
screen: Dashboard,
navigationOptions: {
headerStyle: {display:"none"},
headerLeft: null
},
},
Si vous utilisez toujours NavigatorIOS, vous pouvez le faire comme ceci:
modifiez le fichier NavigatorIOS.ios.js comme ci-dessous:
before: navigationBarHidden={this.props.navigationBarHidden}
after: navigationBarHidden={route.navigationBarHidden}
navigator.Push ({navigationBarHidden: false})
utilisez header: null pour la navigation réactive dans vos options de navigation comme suit;
navigationOptions: {
header: null,
}
transmettez cette propriété avec navigator.Push ou initialRoute en la définissant comme true
navigationBarHidden ?: PropTypes.bool
Valeur booléenne indiquant si la barre de navigation est masquée par défaut.
par exemple:
<NavigatorIOS
style={styles.container}
initialRoute={{
title: 'LOGIN',
component: Main,
navigationBarHidden: true,
}}/>
ou
this.props.navigator.replace({
title: 'ProviderList',
component: ProviderList,
passProps: {text: "hai"},``
navigationBarHidden: true,
});
static navigationOptions = { title: 'Welcome', header: null };