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


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.