You need to enable JavaScript to run this app. React Native:如何在指定screen页面禁用drawer侧边抽屉导航
优惠活动
大模型
产品
解决方案
定价
更多

React Native:如何在指定screen页面禁用drawer侧边抽屉导航

问题原因

你的导航层级是 Drawer导航为根导航,Stack导航是Drawer的子路由,gestureEnabled 是Drawer导航的专属配置项,直接写在Stack的screen配置中只会作用于Stack自身的右滑返回手势,无法传递到父级Drawer,所以配置不生效。

修复方案

步骤1:给Drawer导航设置唯一ID,方便子路由调用

修改你的Drawer导航配置,添加id属性,避免多层导航嵌套时找错父级:

<Drawer.Navigator 
  id="Drawer" // 新增这行
  initialRouteName="Home" 
  drawerContent={props => {
    return (
      <DrawerContentScrollView {...props}>
        <DrawerItemList {...props} />
      </DrawerContentScrollView>
    )
  }}>

步骤2:在Work页面监听聚焦状态,动态修改Drawer配置

在你的Work页面组件中,通过路由聚焦钩子动态切换Drawer的手势开关:

// 先导入依赖
import { useFocusEffect } from '@react-navigation/native';
import { useCallback } from 'react';

// Work组件内部添加这段逻辑
const Work = ({ navigation }) => {
  useFocusEffect(
    useCallback(() => {
      // 进入Work页面时禁用Drawer手势
      navigation.getParent('Drawer').setOptions({ gestureEnabled: false });
      // 离开Work页面时恢复Drawer手势
      return () => {
        navigation.getParent('Drawer').setOptions({ gestureEnabled: true });
      };
    }, [navigation])
  );

  // 剩下的Work组件原有逻辑
  // ...
}

步骤3:移除WorkHeader的抽屉打开按钮

你的WorkHeader里如果保留了点击呼出抽屉的菜单按钮,就算禁用手势,用户点击按钮依然可以打开抽屉,所以需要把对应TouchableOpacity节点删掉。


内容的提问来源于stack exchange,提问作者Surapat Pongsuwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 08:45:02