React Navigation v5 使用自定义标头

ver*_*per 2 react-native react-navigation

如果我在 React-Navigation V5 中将标头设置为关闭,是否可以拥有自定义标头?

我尝试过,但是headerLeftandheaderRight似乎什么也没做,例如,我有以下内容:

<Stack.Screen
  component={UploadStack}
  name="UploadStack"
  options={{ headerShown: false }}
/>
Run Code Online (Sandbox Code Playgroud)

然后在我的UploadStack,我有

<Stack.Navigator initialRouteName="TrackUploadSelectionScreen">
      <Stack.Screen
        name="AddToPlaylistScreen"
        component={AddToPlaylistScreen}
      />
      <Stack.Screen
        name="TrackUploadSelectionScreen"
        component={TrackUploadSelectionScreen}
        options={{
          title: t('general.selectToUpload'),
          headerLeft: () =>
            Platform.select({
              ios: () => (
                <NavigationHeader.TextButton
                  label={t('general.cancel')}
                  onPress={navigation.goBack()}
                />
              ),
              android: () => (
                <NavigationHeader.IconButton
                  iconName="times"
                  label={t('general.cancel')}
                  onPress={navigation.goBack()}
                />
              )
            })
        }}
      />
</Stack.Navigator>
Run Code Online (Sandbox Code Playgroud)

但它没有创造任何东西

小智 8

我发现有效的方法是添加一个函数,将反应元素呈现到Stack.Navigator组件上的 header 属性。这将允许它出现在每个Stack.Screen子元素中。

示例如图所示,

<Stack.Navigator
  initialRouteName="Page1"
  screenOptions={{header: NavHeader}}
>
     <Stack.Screen name="Page1" component={Page1} />
     <Stack.Screen name="Page2" component={Page2} />
</Stack.Navigator>
Run Code Online (Sandbox Code Playgroud)

NavHeader 组件可以是简单的 React 元素。在此示例中,您只需将其作为函数即可。

function NavHeader() {
    return <View>...</View>;
}
Run Code Online (Sandbox Code Playgroud)