スタックナビゲーターのReactナビゲーションでヘッダーを非表示にする


135

スタックとタブナビゲーターの両方を使用して画面を切り替えようとしています。

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

この場合、stacknavigatorが最初に使用され、次にtabnavigatorが使用されます。スタックナビゲーターのヘッダーを非表示にしたい。次のようなナビゲーションオプションを使用すると、WItが正しく機能しません。

navigationOptions: { header: { visible: false } }

私はstacknavigatorで使用している最初の2つのコンポーネントでこのコードを試しています。この行を使用すると、次のようなエラーが発生します。

ここに画像の説明を入力してください

回答:


328

バージョン5以降の更新

バージョン5以降はオプションです headerShownscreenOptions

使用例:

<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)以降
、新しいnavigationOptionがあります。headershown

      navigationOptions: {
        headerShown: false,
      }

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

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

古い答え

これを使用してスタックバーを非表示にします(これは2番目のパラメーターの値です)。

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

完璧に働いています!あなたの答えに感謝しますが、これを追加した後に問題が1つあります。tabnavigatorからstacknaviagtorに画面を切り替えるときにヘッダーを表示したい場合はどうすればよいですか?
Avijit Dutta 2017年

2
うーん、それは素晴らしい質問です。正直なところ、私にはわかりません。表示したい画面で@Dpkstrの回答を試すことができます。nullの代わりにtrueになります。
ペリー

うーん、私はすでにこれを試しましたが、それもうまくいきませんでした...最初の回答に感謝します。とりあえず、ボタンを使用して2番目の機能を作成します。
Avijit Dutta 2017年

コンポーネント内のボタンをクリックしたときにヘッダーを動的に表示および非表示にする方法 静的なnavigationOptions = {header:null}を指定した場合。ヘッダーを完全に非表示にします。一部のボタンをクリックしたときに表示または非表示にしたい
Venkatesh Somu

1
彼がv5以降の特定の画面のヘッダーを非表示にしたい場合は、optionsこのような小道具を使用する必要があります<Stack.Screen options={{ headerShown: false, }} name="Artist" component={Artist} />
Oliver D

130

ヘッダーを非表示にするページで以下のコードを使用するだけです

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

スタックナビゲーターを参照してください


それは問題ありませんが、1つの問題は、stacknavigatorからtabNavigatorに画面を切り替えると(OTPverification画面のような私の質問コンポーネントの言及によると、そのときに両方のヘッダーが表示されることです
Avijit Dutta

リストへの移動の正確さを教えてください
Dpkstr

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 }私が反応し、ネイティブのCLIを使用しています。これは例です:

static navigationOptions = {
   header : null   
};

10

指定されたソリューションでは、HomeScreenのヘッダーは非表示になっています。

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

9

stackNavigatorに新しいnavigationOptionsオブジェクトを追加します。

これを試して :

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

ヘッダーをトグルする方法を検索している場合、componentDidMountで次のように記述します。

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

4

あなたはこのようにヘッダーを隠すことができます:

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


2

それを1つの画面から削除するだけの場合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

使用している反応ナビゲーションライブラリのバージョンがすべて異なるため、ソリューションと一致させることが重要です。私のような何らかの理由で引き続きreact-navigation 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. 単一画面の場合、次のようにcreateStackNavigatorでheader:nullまたはheaderShown:falseを設定できます

    const App = createStackNavigator({
     First: {
    screen: Home,
    navigationOptions: {
      header: null,
                       },
           },
    });
  2. defaultNavigationOptionsを使用して、すべての画面のヘッダーを一度に非表示にします

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

0

すべての画面からヘッダーを削除する場合はapp.jsに移動し、このコードをStack.Navigatorに追加します

screenOptions={ { headerShown: false } }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.