2017-02-22 76 views
6

我使用官方react-navigation来处理我的导航。我有一个主要的TabNavigator的与两个选项卡(称为HitchhikingMapNavigator及以下SettingsNavigator)整个应用程序,并且每个标签都有一个嵌套StackNavigator:React-Navigation:无法隐藏标头嵌套导航器

const HitchhikingMapNavigator = StackNavigator({ 
    hitchhikingMap: { screen: HitchhikingMapViewContainer }, 
    spotDetails: { screen: SpotDetailsViewContainer } 
}, { 
    navigationOptions: { 
    header: { 
     visible: false 
    } 
    } 
}); 

const SettingsNavigator = StackNavigator({ 
    // some other routes 
}); 

export default AppNavigator = TabNavigator({ 
    hitchhikingMap: { screen: HitchhikingMapNavigator }, 
    settings: { screen: SettingsNavigator } 
}, { 
    navigationOptions: { 
    header: { 
     visible: false, 
    }, 
}, 
}); 

正如你所看到的,我把这些标头的visilibility假无处不在,即使在我HitchhikingMapViewContainer的观点:

class HitchhikingMapView extends React.Component { 

    static navigationOptions = { 
    title: 'Map', 
    header: { 
     visible: false, 
    }, 
    //...other options 
    } 

然而,标题栏仍是可见:

screenshot

如果我不嵌套导航器(即如果我把这个代码,跳过嵌套的一个):

export default AppNavigator = TabNavigator({ 
    hitchhikingMap: { screen: HitchhikingMapViewContainer }, 
    settings: { screen: SettingsNavigator } 
}); 

然后头正确隐藏。

所以结论:当我有两个嵌套的导航器时,我不能使标题不可见。有任何想法吗?

回答

10

对于那些谁仍在寻找答案,我将它张贴在这里。

所以两个解决方案:

1解决方法:在使用StackNavigator headerMode: 'none'。这将从StackNavigator中的所有屏幕删除标题

第二种解决方案:在StackNavigator中使用headerMode: 'screen',并在要隐藏标题的屏幕的navigationOptions中添加header: { visible: false }

更多信息可以在这里找到:https://reactnavigation.org/docs/navigators/stack

+4

至于React Navigation 1.0.0-beta.11 header:{visible:false}不起作用。改用header:null。 –

2

这为我工作:

headerMode: 'none' 
+1

在''react-navigation“中不起作用:”^ 1.0.0-beta.7“ –

+2

我有”react-navigation“:”^ 1.0.0-beta.9“和方法 - >静态navigationOptions = {header:false}为我工作。 –

+0

@DanielArenas你是我的英雄伙伴 –

6

v1.0.0-beta.9开始,请使用下,

static navigationOptions = { 
    header: null 
} 
0

这为我工作,我在Android方面的工作中反应原生版本0.45

static navigationOptions = { 
    header: null 
} 
0

这对我隐藏导航:

static navigationOptions = { 
    header: null 
};