[英]Hide header in stack navigator React navigation
我正在嘗試使用堆棧和選項卡導航器切換屏幕。
const MainNavigation = StackNavigator({
otp: { screen: OTPlogin },
otpverify: { screen: OTPverification},
userVerified: {
screen: TabNavigator({
List: { screen: List },
Settings: { screen: Settings }
}),
},
});
在這種情況下,首先使用堆棧導航器,然后使用選項卡導航器。 我想從堆棧導航器中隱藏標題。 當我使用以下導航選項時,它無法正常工作:
navigationOptions: { header: { visible: false } }
我在 stacknavigator 中使用的前兩個組件上嘗試此代碼。 如果我使用此行,則會出現一些錯誤,例如:
從第 5 版開始更新
從版本 5 開始,它是選項headerShown
in 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,
}
}
);
在 v4 上,只需在要隱藏標題的頁面中使用以下代碼
export default class Login extends Component {
static navigationOptions = {
header: null
}
}
請參閱堆棧導航器
只需將其添加到您的類/組件代碼片段中,Header 將被隱藏
static navigationOptions = { header: null }
在給定的解決方案中,HomeScreen 的標題是隱藏的,選項={{headerShown:false}}
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} options={{headerShown:false}}/>
<Stack.Screen name="Details" component={DetailsScreen}/>
</Stack.Navigator>
</NavigationContainer>
如果你的屏幕是一個類組件
static navigationOptions = ({ navigation }) => {
return {
header: () => null
}
}
在您的目標屏幕中將其編碼為第一種方法(函數)。
如果你想隱藏在特定屏幕上而不是這樣:
// create a component
export default class Login extends Component<{}> {
static navigationOptions = { header: null };
}
我正在使用header : null
而不是header : { visible : true }
我正在使用 react-native cli。 這是例子:
static navigationOptions = {
header : null
};
在 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 } }
});
希望它有幫助。
如果有人在 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,
});
這對我有用:
const Routes = createStackNavigator({
Intro: {
screen: Intro,
navigationOptions: {
header: null,
}
}
},
{
initialRouteName: 'Intro',
}
);
您可以像這樣隱藏標題:
<Stack.Screen name="Login" component={Login} options={{headerShown: false}} />
采用
static navigationOptions = { header: null }
在類/組件中
class Login extends Component {
static navigationOptions = {
header: null
}
}
如果你使用 react-navigation Version: 6.x 你可以這樣使用。 在這里,SignInScreen 標題將被以下代碼段隱藏
options={{
headerShown: false,
}}
完整的腳本應該是
import {createStackNavigator} from '@react-navigation/stack';
import SignInScreen from '../screens/SignInscreen';
import SignUpScreen from '../screens/SignUpScreen';
const Stack = createStackNavigator();
function MyStack() {
return (
<Stack.Navigator>
<Stack.Screen
name="Sing In"
component={SignInScreen}
options={{
headerShown: false,
}}
/>
<Stack.Screen name="Sing Up" component={SignUpScreen} />
</Stack.Navigator>
);
}
export default function LoginFlowNavigator() {
return <MyStack />;
}
React Native Navigation v6.x 2022 年 5 月
在 Screen 的options屬性中的headerShown
屬性中設置false
<Stack.Navigator initialRouteName="Home">
<Stack.Screen
name="Home"
component={Home}
options={{ headerShown: false }}
/>
</Stack.Navigator>
附言
const Stack = createNativeStackNavigator()
。
在您的目標屏幕中,您必須對此進行編碼!
static navigationOptions = ({ navigation }) => {
return {
header: null
}
}
所有的答案都展示了如何使用類組件來做到這一點,但對於功能組件,您可以這樣做:
const MyComponent = () => {
return (
<SafeAreaView>
<Text>MyComponent</Text>
</SafeAreaView>
)
}
MyComponent.navigationOptions = ({ /*navigation*/ }) => {
return {
header: null
}
}
如果您刪除標題,您的組件可能位於您看不到它的地方(當手機沒有方形屏幕時),因此在刪除標題時使用它很重要。
<Stack.Screen
name="SignInScreen"
component={Screens.SignInScreen}
options={{ headerShown: false }}
/>
options={{ headerShown: false }}
對我options={{ headerShown: false }}
。
** "@react-navigation/native": "^5.0.7", "@react-navigation/stack": "^5.0.8",
在react navigation 5.x 中,您可以通過將Navigator
的headerMode
設置為false
來隱藏所有屏幕的標題。
<Stack.Navigator headerMode={false}>
{/* Your screens */}
</Stack.Navigator>
這適用於堆棧導航
<Stack.Screen
name="Home"
component={HomeComponent}
options={{
headerShown: false,
}}
/>
如果您只想將其從react-native-navigation
一個屏幕中刪除,則:
<Stack.Navigator>
<Stack.Screen
name="Login"
component={Login}
options= {{headerShown: false}} />
</Stack.Navigator>
對我來說, navigationOptions
不起作用。 以下對我有用。
<Stack.Screen name="Login" component={Login}
options={{
headerShown: false
}}
/>
const MyNavigator = createStackNavigator({
FirstPage: {screen : FirstPageContainer, navigationOptions: { headerShown:false } },
SecondPage: {screen : SecondPageContainer, navigationOptions: { headerShown: false } }
});
//header:null will be removed from upcoming versions
您可以像這樣隱藏 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>
);
}
這將從組件類中刪除標題。
export default class SampleClass extends Component {
navigationOptions = {
headerMode: 'none'
}
...
}
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,
};
在最新版本的 react-navigation 中,這可以隱藏每個屏幕上的標題:headerMode={'none'}
<Stack.Navigator headerMode={'none'} > <Stack.Screen name="Home" component={HomeScreen}/> <Stack.Screen name="Details" component={DetailsScreen}/> </Stack.Navigator>
使用最新的react-navigation-stack v4,您可以隱藏標題
import { createStackNavigator } from 'react-navigation-stack';
createStackNavigator({
stackName: {
screen:ComponentScreenName,
navigationOptions: {
headerShown:false
}
}
})
您只能在新的更新版本中使用 headerShown:false ( react-naviagion 版本 6 )
import { createStackNavigator } from '@react-navigation/stack';
const Util = createStackNavigator();
const UtilStack = () =>{
return(
<Util.Navigator>
<Util.Screen name='Splash' component={Splash} options={{ headerShown: false }}/>
)
<Util.Navigator>
}
我遇到了同樣的問題,但是我已經使用navigationOptions
在各個類中完成了標頭工作,並且正在使用createBottomTabNavigator
其標頭可見,而類的標頭不可見。 我已經嘗試了諸如headerMode: none
, header: null
等之類的所有操作,但是無法隱藏bottomTabNavigator
的標題。
將您使用的 react-navigation 庫版本與解決方案相匹配很重要,因為它們都是不同的。 對於那些像我一樣出於某種原因仍在使用 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',
}
);
對於單屏,您可以像這樣在 createStackNavigator 中設置header:null或headerShown: false
const App = createStackNavigator({ First: { screen: Home, navigationOptions: { header: null, }, }, });
使用 defaultNavigationOptions 一次性隱藏所有屏幕的標題
const App = createStackNavigator({ First: { screen: HomeActivity, }, }, { defaultNavigationOptions: { header: null }, });
如果要從所有屏幕中刪除標題,請轉到 app.js 並將此代碼添加到 Stack.Navigator
screenOptions={ { headerShown: false } }
在V4 上你必須使用這個:
headerLeft: () => { }
這是不推薦使用的:
header: null
嘗試最好的方法,下面的代碼對我有用。
options={{
headerShown: false,
}}
將上面的代碼放在 <Stack.Screen 標簽中。
<Stack.Navigator>
<Stack.Screen name="LogOut" component={LogOut} options={{
headerShown: false,
}} />
</Stack.Navigator>
</NavigationContainer>
從特定屏幕隱藏 header 的另一種方法是嘗試使用 React 中的 useLayoutEffect。 像這樣:
import { View, Text, Button } from "react-native";
import React, { useLayoutEffect } from "react";
import { useNavigation } from "@react-navigation/native";
import useAuth from "../hooks/userAuth";
const HomeScreen = () => {
const navigation = useNavigation();
const { logout } = useAuth();
useLayoutEffect(() => {
navigation.setOptions({
headerShown: false,
});
}, []);
return (
<View>
<Text>I am the HomeScreen</Text>
<Button
title="Go to Chat Screen"
onPress={() => navigation.navigate("Chat")}
/>
<Button title="Logout" onPress={logout} />
</View>
);
};
export default HomeScreen;
這通常允許隱藏組件 header 並且它將在屏幕渲染時執行。
對於 4.x,不推薦使用header: null
,應使用headerShown: false
代替
例如:
const AppScreens = createStackNavigator({
cover: {
screen: Login,
path: '/login',
navigationOptions: () => ({
headerShown: false,
}),
},
})
/*...*/
import { createNativeStackNavigator } from "@react-navigation/native-stack";
/*...*/
const {Navigator, Screen } =createNativeStackNavigator();
export function AuthRoutes(){
return (
<Navigator
screenOptions={
{
contentStyle:{
backgroundColor: 'transparent'
},
headerShown: false
}
}
>
</Navigator>
)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.