Сховати заголовок у навігаторі стеків Реагувати навігацію


136

Я намагаюся переключити екран за допомогою навігатора стека та вкладки.

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

У цьому випадку спочатку використовується стекнавігатор, а потім табнавігатор. і я хочу приховати заголовки навігатора стеків. WI не працює належним чином, коли я використовую навігаційні параметри типу:

navigationOptions: { header: { visible: false } }

Я намагаюся цей код на перших двох компонентах, які використовуються в stacknavigator. якщо я використовую цей рядок, то отримую помилку, наприклад:

введіть тут опис зображення

Відповіді:


330

ОНОВЛЕННЯ версії 5

Для версії 5 це варіант headerShownвscreenOptions

Приклад використання:

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

Якщо ви хочете приховати лише заголовок на 1 екрані, це можна зробити, встановивши параметри screenOptions на компоненті екрана, див. Нижче, наприклад:

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

Дивіться також блог про версію 5

ОНОВЛЕННЯ
Станом на версію 2.0.0-alpha.36 (2019-11-07)
є нова навігаціяОпція:headershown

      navigationOptions: {
        headerShown: false,
      }

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

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

Стара відповідь

Я використовую це, щоб приховати панель стека (зауважте, це значення другого параметра):

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

При використанні цього методу він буде прихований на всіх екранах.

У вашому випадку це буде виглядати приблизно так:

const MainNavigation = StackNavigator({
  otp: { screen: OTPlogin },
  otpverify: { screen: OTPverification },
  userVerified: {
    screen: TabNavigator({
    List: { screen: List },
    Settings: { screen: Settings }
   }),
 }
},
{
  headerMode: 'none',
  navigationOptions: {
    headerVisible: false,
  }
 }
);

Працює ідеально! дякую за відповідь ури, але у мене є одна проблема після додавання цього, що є: переключення stacknavigator на tabnavigator його добре працює. якщо я хочу показати заголовок, коли я перемикаю екран з табнавігатора на stacknaviagtor, що мені робити?
— Авіджіт Дутта

2
Хм, це чудове запитання. Якщо чесно, я цього не знаю. Ви можете спробувати @Dpkstr відповідь на екрані, який ви хочете показати, замість нуля це було б правдою.
— Перрі

Хм, я вже спробував це, але також не вийшло ... дякую за вашу першу відповідь. Я зроблю другу функціональність за допомогою кнопки лише зараз.
— Avijit Dutta

як динамічно показувати та приховувати заголовок при натисканні на кнопку всередині компонента. Якщо ми дамо статичну НавігаціяOptions = {header: null}. Я повністю приховую заголовок. Я хочу показати або приховати, коли натиснути якусь кнопку
— Venkatesh Somu

1
Якщо він хоче приховати заголовок для конкретного екрана в v5 +, слід використовувати optionsопору, як це<Stack.Screen options={{ headerShown: false, }} name="Artist" component={Artist} />
— Олівер D

130

Просто скористайтеся наведеним нижче кодом на сторінці, на якій хочете заголовок

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

зверніться до Навігатора стека


Це добре, але одна проблема полягає в тому, що при переключенні екрана в tabNavigator з stacknavigator (як згадується на моїх запитаннях компонентів, таких як OTPверифікаційний екран, щоб переглядати екран того часу, показуються обидва заголовки
— Avijit Dutta,

Чи можете ви сказати мені, як саме ви
— переходите

22

Просто додайте це до фрагменту коду класу / компонента, і заголовка буде приховано

 static navigationOptions = { header: null }

15

Якщо ваш екран - компонент класу

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

кодуйте це на своєму цільовому екрані як перший метод (функцію).


1
правильно, header: () => nullце правильний спосіб, інакше ви отримуєте глюк в шапці під час завантаження сторінки
— Cristian Tr

11

Якщо ви хочете сховатися на певному екрані, ніж це зробити:

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

10

Я використовую header : nullзамість того, що header : { visible : true }я використовую рідний кліп реакції. це приклад:

static navigationOptions = {
   header : null   
};

10

У даному рішенні Заголовок приховано для HomeScreen by- options = {{headerShown: false}}

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

9

Додайте новий об'єкт навігаціїOptions в стекNavigator.

Спробуйте це :

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 } }
});

Сподіваюся, це допомагає.


7

Якщо хтось шукає, як переключити заголовок так, у компонентDidMount напишіть щось на кшталт:

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

Коли

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>
    };
};

А десь, коли подія закінчить роботу:

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


4

На своєму цільовому екрані ви повинні це кодувати!

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



2

Якщо ви хочете видалити його лише з одного екрана react-native-navigation:

<Stack.Navigator>
    <Stack.Screen 
            name="Login" 
            component={Login} 
            options= {{headerShown: false}} />
</Stack.Navigator>

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,

};

1

Уся відповідь показує, як це зробити з компонентами класу, але для функціональних компонентів ви робите:

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

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

Якщо ви вилучите заголовок, ваш компонент може знаходитись там, де його не можна побачити (коли телефон не має квадратного екрану), тому важливо використовувати його під час видалення заголовка.


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

//header:null will be removed from upcoming versions

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

options={{ headerShown: false }} працює для мене.

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


1

У режимі навігації 5.x ви можете приховати заголовок для всіх екранів, встановивши headerModeопору Navigatorдля false.

<Stack.Navigator headerMode={false}>
   {/* Your screens */}
</Stack.Navigator>

1

Ви можете приховати заголовок StackNavigator так:

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>
    );
}

0

Важливо відповідати, яку версію бібліотеки реагування-навігації ви використовуєте для рішення, оскільки всі вони різні. Для тих, хто все ще використовує реакцію-навігацію v1.0.0 чомусь, як я, обидва працювали:

Для відключення / приховування заголовка на окремих екранах:

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

Щоб вимкнути / приховати всі екрани одразу, використовуйте це:

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

0

В останній версії react-navigation це дозволяє приховати заголовок на кожному екрані: headerMode = {'none'}

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


0

для 4.x, header: nullзастаріле, слід використовувати headerShown: falseзамість цього

колишній:

const AppScreens = createStackNavigator({
  cover: {
    screen: Login,
    path: '/login',
    navigationOptions: () => ({
      headerShown: false,
    }),
  },
})

0
  1. Для одного екрана можна встановити заголовок: null або headerShown: false у createStackNavigator, як це

    const App = createStackNavigator({
     First: {
    screen: Home,
    navigationOptions: {
      header: null,
                       },
           },
    });
  2. Сховати заголовок одночасно з усіх екранів, використовуючи параметри defaultNavigationOptions

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

0

якщо ви хочете видалити заголовок з усіх екранів goto app.js і додати цей код до Stack.Navigator

screenOptions={ { headerShown: false } }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.