我正在尝试同时使用堆栈和标签导航器切换屏幕。
const MainNavigation = StackNavigator({
otp: { screen: OTPlogin },
otpverify: { screen: OTPverification},
userVerified: {
screen: TabNavigator({
List: { screen: List },
Settings: { screen: Settings }
}),
},
});
在这种情况下,首先使用stacknavigator,然后使用tabnavigator。我想隐藏堆栈导航器的标题。当我使用如下导航选项时,它无法正常工作:
navigationOptions: { header: { visible: false } }
我正在在stacknavigator中使用的前两个组件上尝试此代码。如果我使用此行,则会出现类似以下错误:
从版本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)起,
有一个新的navigationOption: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,
}
}
);
只需在页面中使用以下代码即可隐藏标题
export default class Login extends Component {
static navigationOptions = {
header: null
}
}
请参阅堆栈导航器
只需将其添加到您的类/组件代码片段中,标题将被隐藏
static navigationOptions = { header: null }
如果您的屏幕是班级组件
static navigationOptions = ({ navigation }) => {
return {
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>
如果您想隐藏在特定屏幕上而不是这样做:
// 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',
}
);
在目标屏幕中,您必须对此进行编码!
static navigationOptions = ({ navigation }) => {
return {
header: null
}
}
您可以这样隐藏标题:
<Stack.Screen name="Login" component={Login} options={{headerShown: false}} />
在反应导航5.x中,你可以通过设置为隐藏所有屏幕头headerMode
的的道具Navigator
来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>
您可以像这样隐藏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>
);
}
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,
};
所有答案都显示了如何使用类组件进行操作,但是对于功能组件,您可以执行以下操作:
const MyComponent = () => {
return (
<SafeAreaView>
<Text>MyComponent</Text>
</SafeAreaView>
)
}
MyComponent.navigationOptions = ({ /*navigation*/ }) => {
return {
header: null
}
}
如果卸下插头,则组件可能位于看不见的地方(当手机没有方形屏幕时),因此在卸下插头时使用它很重要。
const MyNavigator = createStackNavigator({
FirstPage: {screen : FirstPageContainer, navigationOptions: { headerShown:false } },
SecondPage: {screen : SecondPageContainer, navigationOptions: { headerShown: false } }
});
//header:null will be removed from upcoming versions
<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",
在最新版本的react-navigation中,它可以在每个屏幕上隐藏标题:headerMode = {'none'}
<Stack.Navigator
headerMode={'none'}
>
<Stack.Screen name="Home" component={HomeScreen}/>
<Stack.Screen name="Details" component={DetailsScreen}/>
</Stack.Navigator>
这将从组件类中删除标题。
export default class SampleClass extends Component {
navigationOptions = {
headerMode: 'none'
}
...
}
将您使用的反应导航库版本与解决方案进行匹配非常重要,因为它们都是不同的。对于像我这样出于某种原因仍在使用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 } }
对于4.x,header: null
已弃用,应headerShown: false
改用
例如:
const AppScreens = createStackNavigator({
cover: {
screen: Login,
path: '/login',
navigationOptions: () => ({
headerShown: false,
}),
},
})
文章标签:expo , javascript , react-native , react-navigation
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!