【问题标题】:How to hide bottom bar on modal screen?如何在模态屏幕上隐藏底栏?
【发布时间】:2021-11-08 09:52:26
【问题描述】:

我有一个带有底部栏的应用程序,我想从其中一个没有底部选项卡的情况下呈现一个模态屏幕。我不明白为什么它在 iOS 上可以正常工作,但在 Android 上却不行。

这是我的底部标签导航器,其中包含我的所有标签:

// AppStack.tsx

const Tab = createBottomTabNavigator()

const AppStack = () => {
  return (
    <Tab.Navigator initialRouteName="homeStack" >
      <Tab.Screen name="homeStack" component={HomeStack} />
      ...
    </Tab.Navigator>
  )
}

这里是堆栈导航器,它包含多个屏幕,但也包含一个应该以模态方式呈现的屏幕(因此没有底部栏)。

// HomeStack.tsx

const Stack = createNativeStackNavigator()

const HomeStack = () => {
  return (
    <Stack.Navigator initialRouteName="home">
      <Stack.Screen name="home" component={HomeScreen} />
      ...

      <Stack.Screen
        name="addStuff"
        component={StuffStack}
        options={{
          presentation: 'fullScreenModal',
        }}
      />

    </Stack.Navigator>
  )
}

HomeStack 的屏幕之一呈现addStuff 模态屏幕可以在iOS 上按预期工作:不显示底部栏。但在 Android 上,底部栏仍然存在...

// HomeScreen.tsx
navigation.navigate('addStuff')

有人知道如何告诉 react-navigation 不要在此模式屏幕上添加此底部栏吗?

【问题讨论】:

    标签: react-native react-navigation


    【解决方案1】:

    您可以创建条件规则来检查屏幕名称。

    为此,您需要获取导航道具(存在于您的HomeStack)并使用getFocusedRouteNameFromRoute 方法获取当前屏幕名称:

    import {getFocusedRouteNameFromRoute} from '@react-navigation/native';
    // rest of the codes ...
    
    const HomeStack = ({route, navigation}) => {
    
      React.useLayoutEffect(() => {
        const routeName = getFocusedRouteNameFromRoute(route);
        if (routeName === 'addStuff') {
          navigation.setOptions({tabBarVisible: false});
        } else {
          navigation.setOptions({tabBarVisible: true});
        }
      }, [navigation, route]);
    
      return (
        <Stack.Navigator initialRouteName="home">
          <Stack.Screen name="home" component={HomeScreen} />
          // rest of the codes ...
          <Stack.Screen
            name="addStuff"
            component={StuffStack}
            options={{
              presentation: 'fullScreenModal',
            }}
          />
        </Stack.Navigator>
      )
    }
    

    【讨论】:

    • 太棒了,这似乎按预期工作!我不知道我可以从这个地方访问导航道具。非常感谢。
    • 为了找到合适的方法来确定页面和导航深度,我苦苦挣扎了一周,最后结合了一些方法来实现这种结构。有了这个简单的结构,你可以走得更远,做正确的动作。 @klefevre
    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    相关资源
    最近更新 更多