参考:

​https://www.jianshu.com/p/97cafea3ca38?utm_source=desktop&utm_medium=timeline​

 

const RecordStack = createStackNavigator({
RecordVC: {screen: RecordVC},
BookDetailScreen: {screen: BookDetailScreen}
});

export const TabNavigator = createBottomTabNavigator({
Home: { screen: HomeScreen},
Book: { screen: BookStack},
Mybook: {screen: MybookStack},
Member: {screen: MemberStack},
Record: {screen: RecordStack}
},

 以上代码,我想点击Record标签时并进入到

BookDetailScreen页面隐藏掉tab bar,之前很难处理是因为,  BookDetailScreen已经在navigator stack里面,只能调navigator的options,现在定义如下:

RecordStack.navigationOptions= ({ navigation }) => {  
let { routeName } = navigation.state.routes[navigation.state.index];
if(routeName=='BookDetailScreen'){
return {
tabBarVisible:false,
};
}
};


这样建立某一个stack的专属navigationOptions,然后通过获取routeName获取页面,来改变属性


{ navigation }是上一层的navigation属性


tabBarVisible的属性值.


推理得出,原理分析:


BookVC: { screen: BookVC, navigationOptions:{header: null} }


 这样写,其实就是:

BookVC.navigationOptions=({navigation})=>{}


 

 

获得的是navigator stack的navigation,所以效果就是无法修改 tabBarVisible