【问题标题】:Remove Header React Navigation v5删除标题反应导航 v5
【发布时间】:2020-06-12 02:55:57
【问题描述】:

我似乎无法在新版本的 React Navigation 中将 header 配置为 null。我可以使用 headerTransparent 选项将其设置为透明,但这看起来标题仍然存在,因为屏幕仍然需要名称。

Here is what I had initially, using the template that comes with a new Expo application

And this is what it looks like with the header as transparent。这基本上是我想看到的,但标题仍然被强制在那里。

我不想要导航的标题,但这看起来像是默认行为。我尝试查看文档以查看是否有删除标头的道具,但遇到选项的 404 页面:https://reactnavigation.org/docs/en/navigation-options.html

我是 React Native 的新手,所以我可能有些误解。但是文档对此并不清楚,我找不到直接解决此问题的 stackoverflow 问题。

这是我的 App.js

import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';

import BottomTabNavigator from './navigation/BottomTabNavigator';
import useLinking from './navigation/useLinking';

const Stack = createStackNavigator();

........

<NavigationContainer ref={containerRef} initialState={initialNavigationState}>
  <Stack.Navigator>
    <Stack.Screen name="root" component={BottomTabNavigator} options={{headerTransparent: true}}/>
  </Stack.Navigator>
</NavigationContainer>

这是我的BottomTabNavigator.js,与expo提供的模板代码非常相似。

import * as React from 'react';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import TabBarIcon from '../components/TabBarIcon';
import HomeScreen from '../screens/Home';
import SearchScreen from '../screens/Search';

const BottomTab = createBottomTabNavigator();
const INITIAL_ROUTE_NAME = 'Home';

export default function BottomTabNavigator({ navigation, route }) {
  navigation.setOptions({ headerTitle: getHeaderTitle(route) });
  return (
    <BottomTab.Navigator initialRouteName={INITIAL_ROUTE_NAME}>
      <BottomTab.Screen
        name="Home"
        component={HomeScreen}
        options={{
          title: 'Home',
          tabBarIcon: ({ focused }) => <TabBarIcon focused={focused} name="md-home" />
        }}
      />
      <BottomTab.Screen
        name="Search"
        component={SearchScreen}
        options={{
          title: 'Search',
          tabBarIcon: ({ focused }) => <TabBarIcon focused={focused} name="md-search" />,
        }}
      />
    </BottomTab.Navigator>
  );
}

function getHeaderTitle(route) {
  const routeName = route.state?.routes[route.state.index]?.name ?? INITIAL_ROUTE_NAME;

  switch (routeName) {
    case 'Home':
      return 'How to get started';
    case 'Appointments':
      return 'Your appointments';
    case 'Search':
      return 'Search for services';
    case 'Account':
      return 'Account'
  }
}

【问题讨论】:

标签: react-native react-navigation react-navigation-v5


【解决方案1】:

在您的场景中,您有两个选择。您可以禁用所有屏幕的标题,也可以仅禁用选定屏幕的标题。

要为您的应用程序禁用标头,请像这样编辑您的 app.js

App.js

import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';

import BottomTabNavigator from './navigation/BottomTabNavigator';
import useLinking from './navigation/useLinking';

const Stack = createStackNavigator();

........

<NavigationContainer ref={containerRef} initialState={initialNavigationState}>
  <Stack.Navigator screenOptions={{headerShown: false,}}>
    <Stack.Screen name="root" component={BottomTabNavigator}/>
  </Stack.Navigator>
</NavigationContainer>

您需要将 screenOptions 传递到 Stack.Navigator 并设置 headerShown:false

假设您只想在特定屏幕上禁用标题,那么这个示例将帮助您

<Stack.Navigator ...>
 ...
  <Stack.Screen
    name="Landing"
    component={LandingScreen}
    options={{
      headerShown: false, // change this to `false`
    }}
  />
...
</Stack.Navigator>

希望你对此有清晰的认识:)

【讨论】:

  • @arthurk33 很高兴为您提供帮助
【解决方案2】:

headerMode: none 设置为默认道具会将其从任何屏幕上移除。

const Stack = createStackNavigator();
Stack.Navigator.defaultProps = {
    headerMode: 'none',
};

另外,我认为您也可以将 screenOptions 的 headerShown 属性设置为 false 作为 defaultProp,但这就像在每个屏幕上隐藏标题而不是一次。

【讨论】:

    【解决方案3】:

    在 React Navigation V5 中,添加 options={{ title: "Sign Up", animationEnabled: false, headerShown: false }}

      <AuthStack.Screen
      name="SignupScreen"
      component={SignupScreen}
      options={{ title: "Sign Up", animationEnabled: false, headerShown: false }}
    />
    

    【讨论】:

      【解决方案4】:

      一屏删除:

            <Stack.Screen
                    name="SignIn"
                    component={SignInScreen}
                    options={{
                      headerShown: false,
                    }}
                  />
      

      在所有堆栈中删除:

           <Stack.Navigator
              screenOptions={{
               headerShown: false
              }}
              >
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-08
        • 1970-01-01
        • 1970-01-01
        • 2021-08-29
        • 2020-10-12
        相关资源
        最近更新 更多