2017-06-14 91 views
2

一旦我們在TabRouter內部的StackNavigator中隱藏TabBar,就會出現問題。React-Navigation在TabRouter中隱藏StackNavigator中的tabBar

即時通訊使用navigatorOption,但它似乎沒有做任何事情。

navigationOptions:{tabBarVisible:假}

可以從https://snack.expo.io/Sk4fQHAfZ

import React from 'react'; 
 
import { 
 
    Button, 
 
    Platform, 
 
    ScrollView, 
 
    StyleSheet, 
 
    Text, 
 
    TouchableOpacity, 
 
    View, 
 
} from 'react-native'; 
 
import { 
 
    createNavigator, 
 
    createNavigationContainer, 
 
    TabRouter, 
 
    addNavigationHelpers, 
 
    StackNavigator, 
 
} from 'react-navigation'; 
 

 
const MyNavScreen = ({ navigation, banner }) => (
 
    <ScrollView> 
 
    <Text>{banner}</Text> 
 
    <Button 
 
     onPress={() => { 
 
     navigation.goBack(null); 
 
     }} 
 
     title="Go back" 
 
    /> 
 
    </ScrollView> 
 
); 
 

 
const NestedMyNavScreen = ({ navigation, banner }) => (
 
    <ScrollView> 
 
    <Text>{banner}</Text> 
 
    <Button 
 
     onPress={() => navigation.navigate('Profile', { name: 'Jane' })} 
 
     title="Go to a profile screen" 
 
    /> 
 
    <Button 
 
     onPress={() => navigation.navigate('Photos', { name: 'Jane' })} 
 
     title="Go to a photos screen" 
 
    /> 
 
    </ScrollView> 
 
); 
 

 
const MyNotificationsScreen = ({ navigation }) => (
 
    <MyNavScreen banner="Notifications Screen" navigation={navigation} /> 
 
); 
 

 
const MySettingsScreen = ({ navigation }) => (
 
    <MyNavScreen banner="Settings Screen" navigation={navigation} /> 
 
); 
 

 
const MyPhotosScreen = ({ navigation }) => { 
 
    let params = navigation.state.routes[navigation.state.index].params; 
 
    // let params = navigation.state.params; 
 
    return <MyNavScreen 
 
    banner={`${params.name}'s Photos`} 
 
    navigation={navigation} 
 
    /> 
 
}; 
 
MyPhotosScreen.navigationOptions = { 
 
    title: 'Photos', 
 
}; 
 

 
const MyProfileScreen = ({ navigation }) => { 
 
    let params = navigation.state.routes[navigation.state.index].params; 
 
    // let params = navigation.state.params; 
 
    return <MyNavScreen 
 
    banner={`${params.mode === 'edit' ? 'Now Editing ' : ''}${params.name}'s Profile`} 
 
    navigation={navigation} 
 
    /> 
 
}; 
 

 
const CustomTabBar = ({ navigation }) => { 
 
    const { routes } = navigation.state; 
 
    return (
 
    <View style={styles.tabContainer}> 
 
     {routes.map(route => (
 
     <TouchableOpacity 
 
      onPress={() => navigation.navigate(route.routeName)} 
 
      style={styles.tab} 
 
      key={route.routeName} 
 
     > 
 
      <Text>{route.routeName}</Text> 
 
     </TouchableOpacity> 
 
    ))} 
 
    </View> 
 
); 
 
}; 
 

 
const SimpleStack = StackNavigator({ 
 
    NestedHome: { 
 
    screen: NestedMyNavScreen 
 
    }, 
 
    Profile: { 
 
    path: 'people/:name', 
 
    screen: MyProfileScreen, 
 
    navigationOptions: {tabBarVisible: false} 
 
    }, 
 
    Photos: { 
 
    path: 'photos/:name', 
 
    screen: MyPhotosScreen, 
 
    }, 
 
}); 
 

 
const CustomTabView = ({ router, navigation }) => { 
 
    const { routes, index } = navigation.state; 
 
    const ActiveScreen = router.getComponentForState(navigation.state); 
 
    return (
 
    <View style={styles.container}> 
 
     <ActiveScreen 
 
     navigation={addNavigationHelpers({ 
 
      ...navigation, 
 
      state: routes[index], 
 
     })} 
 
     /> 
 
     <CustomTabBar navigation={navigation} /> 
 
    </View> 
 
); 
 
}; 
 

 
const CustomTabRouter = TabRouter(
 
    { 
 
    Home: { 
 
     screen: SimpleStack, 
 
     path: '', 
 
    }, 
 
    Notifications: { 
 
     screen: MyNotificationsScreen, 
 
     path: 'notifications', 
 
    }, 
 
    Settings: { 
 
     screen: MySettingsScreen, 
 
     path: 'settings', 
 
    }, 
 
    }, 
 
    { 
 
    // Change this to start on a different tab 
 
    initialRouteName: 'Home', 
 
    } 
 
); 
 

 
const CustomTabs = createNavigationContainer(
 
    createNavigator(CustomTabRouter)(CustomTabView) 
 
); 
 

 
const styles = StyleSheet.create({ 
 
    container: { 
 
    marginTop: Platform.OS === 'ios' ? 20 : 0, 
 
    flexDirection: 'column', 
 
    justifyContent: 'space-between', 
 
    flex: 1 
 
    }, 
 
    tabContainer: { 
 
    flexDirection: 'row', 
 
    height: 48, 
 
    }, 
 
    tab: { 
 
    flex: 1, 
 
    alignItems: 'center', 
 
    justifyContent: 'center', 
 
    margin: 4, 
 
    borderWidth: 1, 
 
    borderColor: '#ddd', 
 
    borderRadius: 4, 
 
    }, 
 
}); 
 

 
export default CustomTabs;

回答

0

訪問expo.io好像在使用自定義tabRouter你它不工作。

我得到它的工作將其取出:https://snack.expo.io/H1NmvXE5b

(也用你的世博鏈接你錯用{tabBar : {visible:false}}

您可以在navigationOptions

嘗試和風格你的標籤欄按鈕,無論是在每個屏幕

OR

你可以做到這一點它在這裏完成: (只是出於示例的原因從本土基地文檔:)

export default MainScreenNavigator = TabNavigator(
    { 
    LucyChat: { screen: LucyChat }, 
    JadeChat: { screen: JadeChat }, 
    NineChat: { screen: NineChat } 
    }, 
    { 
    tabBarPosition: "bottom", 
    tabBarComponent: props => { 
     return (
     <Footer> 
      <FooterTab> 
      <Button 
       vertical 
       active={props.navigationState.index === 0} 
       onPress={() => props.navigation.navigate("LucyChat")}> 
       <Icon name="bowtie" /> 
       <Text>Lucy</Text> 
      </Button> 
      <Button 
       vertical 
       active={props.navigationState.index === 1} 
       onPress={() => props.navigation.navigate("JadeChat")}> 
       <Icon name="briefcase" /> 
       <Text>Nine</Text> 
      </Button> 
      <Button 
       vertical 
       active={props.navigationState.index === 2} 
       onPress={() => props.navigation.navigate("NineChat")}> 
       <Icon name="headset" /> 
       <Text>Jade</Text> 
      </Button> 
      </FooterTab> 
     </Footer> 
    ); 
    } 
    } 
));