如何避免在 TabNavigator 及其 children 屏幕中覆盖 header 的 'title'? (react-navigation)

How to avoid overriding 'title' of the header in TabNavigator and its children screens? (react-navigation)

我想用按钮将 TabNavigator 的标题设置为 'Stylebook'。

但是,TabNavigator children 的屏幕更改了 'title'。我认为它覆盖了 'title' 道具。我怎样才能避免它?

这是TabNavigator(我的TabBar在StackNavigator中)

export default TabNavigator(
 {
   Category: {
     screen: StylebookCategoryScreen
   },
   All: {
     screen: StylebookAllScreen
   }
 } ,{
  navigationOptions: ({ navigation }) => ({
    title: 'Stylebook',
    headerRight: (
      <Button onPress={() => navigation.navigate('Wardrobe')}
        title="Wardrobe"
      />
    )
 })
});

StylebookAllScreen 与 StylebookCategoryScreen 几乎相同。

class StylebookAllScreen extends Component {
  static navigationOptions = {
   title:'All'
  }

  render() {
    return (
      <View>
        <Text>StylebookALLScreen</Text>
        <Text>StylebookALLScreen</Text>
      </View>
    )
  }
}

export default StylebookAllScreen;

如果我能解决这个问题,我还可以更改导航器的整个结构。

谢谢!

您必须将 StylebookAllScreen 组件放入 StackNavigator,然后将其放入 TabNavigator。将其放入 StackNavigator 允许您设置 props 就像

navigationOptions: ({navigation}) => ({
      title: "Stylebook",
    }),

使用 headerLeftheaderRight,您可以在标题的 left/right 中添加 Component(例如 Button

尝试这样的事情:

const StylebookStack = StackNavigator({
    StylebookAllScreen: {
        screen: Map,
        navigationOptions: ({ navigation }) => ({
            title: "Stylebook",
            headerTitleStyle: {
                ....
            },
        }),
    },
});

然后将其放入您的 TabNavigator

export default TabNavigator(
 {
   Category: {
     screen: StylebookCategoryScreen
   },
   All: {
     screen: StylebookStack // <--- HERE
   }
 } ,{
  navigationOptions: ({ navigation }) => ({
    title: 'Stylebook',
    headerRight: (
      <Button onPress={() => navigation.navigate('Wardrobe')}
        title="Wardrobe"
      />
    )
 })
});