Ocultar o cabeçalho no navegador da pilha de navegação React

136

Estou tentando mudar de tela usando os navegadores de pilha e de guias.

const MainNavigation = StackNavigator({
      otp: { screen: OTPlogin },
      otpverify: { screen: OTPverification},
      userVerified: {
        screen: TabNavigator({
          List: { screen: List },
          Settings: { screen: Settings }
        }),
      },
    });

Neste caso, stacknavigator é usado primeiro e depois tabnavigator. e quero ocultar os cabeçalhos do navegador de pilha. W não está funcionando corretamente quando eu uso opções de navegação como ::

navigationOptions: { header: { visible: false } }

Estou tentando este código nos primeiros dois componentes que estão usando no stacknavigator. se eu usar esta linha, recebo algum erro como ::

insira a descrição da imagem aqui

Avijit Dutta
fonte

Respostas:

330

ATUALIZAÇÃO a partir da versão 5

A partir da versão 5, é a opção headerShownemscreenOptions

Exemplo de uso:

<Stack.Navigator
  screenOptions={{
    headerShown: false
  }}
>
  <Stack.Screen name="route-name" component={ScreenComponent} />
</Stack.Navigator>

Se você deseja ocultar apenas o cabeçalho em uma tela, pode fazer isso definindo as opções da tela no componente da tela, veja o exemplo abaixo:

<Stack.Screen options={{headerShown: false}} name="route-name" component={ScreenComponent} />

Veja também o blog sobre a versão 5

ATUALIZAÇÃO
A partir da versão 2.0.0-alpha.36 (07-11-2019),
há uma nova opção de navegação:headershown

      navigationOptions: {
        headerShown: false,
      }

https://reactnavigation.org/docs/stack-navigator#headershown

https://github.com/react-navigation/react-navigation/commit/ba6b6ae025de2d586229fa8b09b9dd5732af94bd

Resposta antiga

Eu uso isso para ocultar a barra de pilha (observe que este é o valor do segundo parâmetro):

{
    headerMode: 'none',
    navigationOptions: {
        headerVisible: false,
    }
}

Quando você usa esse método, ele fica oculto em todas as telas.

No seu caso, será assim:

const MainNavigation = StackNavigator({
  otp: { screen: OTPlogin },
  otpverify: { screen: OTPverification },
  userVerified: {
    screen: TabNavigator({
    List: { screen: List },
    Settings: { screen: Settings }
   }),
 }
},
{
  headerMode: 'none',
  navigationOptions: {
    headerVisible: false,
  }
 }
);
Perada
fonte
Funcionando perfeitamente! obrigado pela sua resposta, mas eu tenho um problema depois de adicionar isso que é :: alternar stacknavigator para tabnavigator está funcionando bem. se eu quiser mostrar o cabeçalho ao alternar a tela de tabnavigator para stacknaviagtor, o que devo fazer?
Avijit Dutta de
2
Hmm, essa é uma ótima pergunta. Para ser sincero, não sei disso. Você pode tentar a resposta @Dpkstr na tela que deseja mostrar, em vez de null, seria verdadeiro.
Perry de
Hmm, eu já tentei isso, mas também não estava funcionando ... obrigado pela sua primeira resposta. Vou fazer a segunda funcionalidade usando um botão apenas por agora.
Avijit Dutta de
como mostrar e ocultar o cabeçalho dinamicamente ao clicar no botão dentro do componente. Se dermos NavigationOptions estático = {header: null}. Vou ocultar o cabeçalho completamente. Quero mostrar ou ocultar ao clicar em algum botão
Venkatesh Somu
1
Se ele quiser ocultar o cabeçalho de uma tela específica na v5 + deve usar optionsprop como este<Stack.Screen options={{ headerShown: false, }} name="Artist" component={Artist} />
Oliver D
130

Basta usar o código abaixo na página em que deseja ocultar o cabeçalho

export default class Login extends Component {
    static navigationOptions = {
        header: null
    }
}

consulte Stack Navigator

Dpkstr
fonte
Está funcionando bem, mas um problema é que quando a tela muda para tabNavigator de stacknavigator (conforme menção na minha pergunta, componentes como tela de verificação de OTP para tela de lista naquele momento, ambos os cabeçalhos estão sendo exibidos
Avijit Dutta
Você pode me dizer exatamente como está navegando para List
Dpkstr
22

Basta adicionar isso ao seu snippet de código de classe / componente e o cabeçalho ficará oculto

 static navigationOptions = { header: null }
Vaibhav Bacchav
fonte
15

Se sua tela for um componente de classe

static navigationOptions = ({ navigation }) => {
    return {
       header: () => null
    } 
}

codifique isso em sua tela de destino como o primeiro método (função).


fonte
1
certo, header: () => nullé a maneira correta, caso contrário, você obterá uma falha no cabeçalho ao carregar a página
Cristian Tr
11

Se você quiser se esconder em uma tela específica, faça assim:

// create a component
export default class Login extends Component<{}> {
  static navigationOptions = { header: null };
}
Waqar UlHaq
fonte
10

Estou usando em header : nullvez de header : { visible : true }estou usando CLI nativo de reação. este é o exemplo:

static navigationOptions = {
   header : null   
};
Cevin Ways
fonte
10

Na solução fornecida, o cabeçalho está oculto na tela inicial por- options = {{headerShown: false}}

<NavigationContainer>
  <Stack.Navigator>
    <Stack.Screen name="Home" component={HomeScreen} options={{headerShown:false}}/>
    <Stack.Screen name="Details" component={DetailsScreen}/>
  </Stack.Navigator>
</NavigationContainer>
Abhishek Kumar
fonte
9

Adicione o novo objeto navigationOptions no stackNavigator.

Experimente isto:

const MainNavigator = createStackNavigator({
  LoginPage: {screen : LoginPageContainer, navigationOptions: { header: null } },
  MiddlePage: {screen : MiddlePageContainer, navigationOptions: { header: null } },
  SMS: {screen: ShowSmsContainer, navigationOptions: { header: null } },
  Map: {screen: ShowMapContainer, navigationOptions: { header: null } }
});

Espero que ajude.

Narayan Shrestha
fonte
7

Se alguém estiver pesquisando como alternar o cabeçalho para componentDidMount, escreva algo como:

  this.props.navigation.setParams({
      hideHeader: true,
  });

Quando

static navigationOptions = ({ navigation }) => {
    const {params = {}} = navigation.state;

    if (params.hideHeader) {
      return {
        header: null,
      }
    }

    return {
        headerLeft: <Text>Hi</Text>,
        headerRight: <Text>Hi</Text>,
        headerTitle: <Text>Hi</Text>
    };
};

E em algum lugar quando o evento terminar o trabalho:

this.props.navigation.setParams({
  hideHeader: false,
});
Ernestyno
fonte
6

Isso funcionou para mim:

const Routes = createStackNavigator({
Intro: {
    screen: Intro,
    navigationOptions: {
        header: null,
    }
}
},
    {
        initialRouteName: 'Intro',
    }
);
Diego Santa Cruz Mendezú
fonte
4

Em sua tela direcionada, você deve codificar isso!

 static navigationOptions = ({ navigation }) => {
    return {
       header: null
    }
 }
Pheng Sengvuthy
fonte
4

Você pode ocultar o cabeçalho como este:

<Stack.Screen name="Login" component={Login} options={{headerShown: false}}  />
Arun D Nambissan
fonte
3

Isso está funcionando para navegação de pilha

<Stack.Screen
    name="Home"
    component={HomeComponent}
    options={{
        headerShown: false,
    }}
/>
Sheyan Sandaruwan
fonte
2

Se você deseja removê-lo de uma tela em react-native-navigation:

<Stack.Navigator>
    <Stack.Screen 
            name="Login" 
            component={Login} 
            options= {{headerShown: false}} />
</Stack.Navigator>
Mehdi Raza
fonte
1
const CallStack = createStackNavigator({
  Calls: Calls,
  CallsScreen:CallsScreen,
}, {headerMode: 'none'});

CallStack.navigationOptions = {
  tabBarLabel: 'Calls',
  tabBarIcon: ({ focused }) => (
    <TabBarIcon
      focused={focused}
      name={Platform.OS === 'ios' ? 'ios-options' : 'md-options'}
    />
  ),

   header: null,

        headerVisible: false,

};
Donald
fonte
1

Todas as respostas mostram como fazer isso com componentes de classe, mas para componentes funcionais você faz:

const MyComponent = () => {
    return (
        <SafeAreaView>
            <Text>MyComponent</Text>
        </SafeAreaView>
    )
}

MyComponent.navigationOptions = ({ /*navigation*/ }) => {
    return {
        header: null
    }
}

Se você remover o cabeçalho, seu componente pode estar em lugares onde você não pode vê-lo (quando o telefone não tem tela quadrada), por isso é importante usá-lo ao remover o cabeçalho.

Vencovsky
fonte
1
const MyNavigator = createStackNavigator({
  FirstPage: {screen : FirstPageContainer, navigationOptions: { headerShown:false } },
  SecondPage: {screen : SecondPageContainer, navigationOptions: { headerShown: false } }
});

//header:null will be removed from upcoming versions
Farrukh Taqveem Haider
fonte
1
 <Stack.Screen
    name="SignInScreen"
    component={Screens.SignInScreen}
    options={{ headerShown: false }}
  />

options={{ headerShown: false }} funciona para mim.

** "@react-navigation/native": "^5.0.7", "@react-navigation/stack": "^5.0.8",

Mainak
fonte
1

No react navigation 5.x, você pode ocultar o cabeçalho de todas as telas, definindo o headerModeprop do Navigatorpara false.

<Stack.Navigator headerMode={false}>
   {/* Your screens */}
</Stack.Navigator>
Ajay Sivan
fonte
1

Você pode ocultar o cabeçalho StackNavigator assim:

const Stack = createStackNavigator();
function StackScreen() {
    return (
        <Stack.Navigator
            screenOptions={{ headerShown: false }}>
            <Stack.Screen name="Login" component={Login} />
            <Stack.Screen name="Training" component={Training} />
            <Stack.Screen name="Course" component={Course} />
            <Stack.Screen name="Signup" component={Signup} />
        </Stack.Navigator>
    );
}
Paresh Chavda
fonte
0

É importante combinar a versão da biblioteca de navegação reativa que você está usando com a solução, pois são todas diferentes. Para aqueles que ainda usam o react-navigation v1.0.0 por algum motivo como eu, ambos funcionaram:

Para desativar / ocultar o cabeçalho em telas individuais:

const AppScreens = StackNavigator(
  {
    Main: { screen: Main, navigationOptions: { header: null } },
    Login: { screen: Login },
    Profile: { screen: Profile, navigationOptions: { header: null } },
  });

Para desativar / ocultar todas as telas de uma vez, use:

const AppScreens = StackNavigator(
  {
    Main: { screen: Main},
    Login: { screen: Login },
    Profile: { screen: Profile },
  },
  {
    headerMode: 'none',
  }
);
Edward Tan
fonte
0

Na versão mais recente do react-navigation isso funciona para ocultar o cabeçalho em todas as telas: headerMode = {'none'}

<Stack.Navigator
headerMode={'none'}
>
    <Stack.Screen name="Home" component={HomeScreen}/>
    <Stack.Screen name="Details" component={DetailsScreen}/>
  </Stack.Navigator>

impressionante
fonte
0

para 4.x, o header: nullestá obsoleto, deve usar em headerShown: falsevez disso

ex:

const AppScreens = createStackNavigator({
  cover: {
    screen: Login,
    path: '/login',
    navigationOptions: () => ({
      headerShown: false,
    }),
  },
})
gasolina
fonte
0
  1. Para a tela única, você pode definir header: null ou headerShown: false em createStackNavigator assim

    const App = createStackNavigator({
     First: {
    screen: Home,
    navigationOptions: {
      header: null,
                       },
           },
    });
  2. Ocultar o cabeçalho de todas as telas de uma vez usando defaultNavigationOptions

    const App = createStackNavigator({
    
    First: {
      screen: HomeActivity,
    },
    },
    
    {
    defaultNavigationOptions: {
      header: null
    },
    
    });
Manan
fonte
0

se você quiser remover o cabeçalho de todas as telas, vá para app.js e adicione este código a Stack.Navigator

screenOptions={ { headerShown: false } }
Mehrad Farahnak
fonte