反应导航动画从抽屉到堆栈

发布于 2025-01-25 06:51:00 字数 909 浏览 3 评论 0原文

我有一些抽屉导航

<Drawer.Navigator
      screenOptions={
        drawerStatus ? screenOptions : {...screenOptions, swipeEnabled: false}
      }
      drawerContent={props => <CustomDrawer {...props} />}
      initialRouteName={'Main'}>
      {screens.map(screen => (
        <Drawer.Screen
          key={screen.name}
          name={screen.name}
          component={screen.component}
        />
      ))}
</Drawer.Navigator>

在此抽屉中,我有一个嵌套的屏幕“帖子细节”

    <Stack.Navigator
      screenOptions={{
        headerShown: false,
      }}>
      <Stack.Screen name={'PostDetail'} component={PostDetail} />
  </Stack.Navigator>

如果我从抽屉到嵌套的堆栈屏幕或返回抽屉,我不会捕获动画过渡。

I have some Drawer navigation

<Drawer.Navigator
      screenOptions={
        drawerStatus ? screenOptions : {...screenOptions, swipeEnabled: false}
      }
      drawerContent={props => <CustomDrawer {...props} />}
      initialRouteName={'Main'}>
      {screens.map(screen => (
        <Drawer.Screen
          key={screen.name}
          name={screen.name}
          component={screen.component}
        />
      ))}
</Drawer.Navigator>

And in this Drawer I have a nested screen "Post Detail"

    <Stack.Navigator
      screenOptions={{
        headerShown: false,
      }}>
      <Stack.Screen name={'PostDetail'} component={PostDetail} />
  </Stack.Navigator>

If I navigate from Drawer to nested StackScreen or go back to Drawer, I don`t catch animation transition.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小巷里的女流氓 2025-02-01 06:51:00

显然,仅使用“ CreateRawernAvigator”,无法更改屏幕过渡动画。为此,您必须创建一个“ CreateStackNavigator”,将您的绘图纳维格插入您的“家”。喜欢:

import React from 'react';
import Home from '../pages/home/home';
import HeaderHome from '../shared/headerHome';
import Configuracoes from '../pages/configuracoes';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { createStackNavigator } from '@react-navigation/stack';
import { DrawerContent } from '../shared/drawerContent';

const Drawer = createDrawerNavigator();
const Content = (navigation: any) => (
    <Drawer.Navigator
        drawerContent={props => <DrawerContent {...props} />}
    >
        <Drawer.Screen name="HomeDrawer" component={Home}
            options={{
                header: (props) => <HeaderHome value={props} /> //My cystom Header
            }}
        />
    </Drawer.Navigator>
);

const Stack = createStackNavigator();
const MyStack: React.FC = () => {
    return (
        <Stack.Navigator
            screenOptions={({ route, navigation }) => ({
                headerMode: "float",
                animationEnabled: true
            })}
        >
            <Stack.Screen name="Home" component={Content} //The name used cannot be identical to the one used in Drawer.Navigator
                options={{ headerShown: false }}
            />
            <Stack.Screen name="Configuracoes" component={Configuracoes}
                options={{
                    title: "Title page",
                    headerStyle: {
                        backgroundColor: "red",
                    },
                    headerTintColor: "#fff"
                }}
            />
        </Stack.Navigator>
    );
}

export default MyStack;

Apparently, using only the 'createDrawerNavigator', it is not possible to change the screen transition animation. For this, you must create a 'createStackNavigator', inserting your DrawerNavigator in your 'Home'. Do like:

import React from 'react';
import Home from '../pages/home/home';
import HeaderHome from '../shared/headerHome';
import Configuracoes from '../pages/configuracoes';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { createStackNavigator } from '@react-navigation/stack';
import { DrawerContent } from '../shared/drawerContent';

const Drawer = createDrawerNavigator();
const Content = (navigation: any) => (
    <Drawer.Navigator
        drawerContent={props => <DrawerContent {...props} />}
    >
        <Drawer.Screen name="HomeDrawer" component={Home}
            options={{
                header: (props) => <HeaderHome value={props} /> //My cystom Header
            }}
        />
    </Drawer.Navigator>
);

const Stack = createStackNavigator();
const MyStack: React.FC = () => {
    return (
        <Stack.Navigator
            screenOptions={({ route, navigation }) => ({
                headerMode: "float",
                animationEnabled: true
            })}
        >
            <Stack.Screen name="Home" component={Content} //The name used cannot be identical to the one used in Drawer.Navigator
                options={{ headerShown: false }}
            />
            <Stack.Screen name="Configuracoes" component={Configuracoes}
                options={{
                    title: "Title page",
                    headerStyle: {
                        backgroundColor: "red",
                    },
                    headerTintColor: "#fff"
                }}
            />
        </Stack.Navigator>
    );
}

export default MyStack;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文