Использование значка UIKitten в настройках заголовка react navigation 5

#react-navigation #react-native-ui-kitten

#react-навигация #react-native-ui-kitten

Вопрос:

В моем приложении есть навигация по стеку / ящику. Я хотел бы иметь значок меню в моем верхнем заголовке навигации, который позволяет открывать и закрывать меню ящика.

Это мой код:

 import * as React from 'react';
import { useNavigation, DrawerActions } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { TouchableOpacity } from 'react-native';
import {
  Layout,
  Icon,
  Text,
  TopNavigation,
  TopNavigationAction,
} from '@ui-kitten/components';
import DrawerMenu from './DrawerMenu';

const Stack = createStackNavigator();

const MenuIcon = (props) => <Icon name="menu" {...props} />;

const ToggleMenuAction = () => <TopNavigationAction icon={MenuIcon} />;

const MenuButton = () => (
  <TopNavigation accessoryLeft={ToggleMenuAction} title="Eva Application" />
);

const HeaderLeft = () => {
  const navigation = useNavigation();
  return (
    <Layout style={{ flexDirection: 'row' }}>
      <TouchableOpacity
        onPress={() => {
          navigation.dispatch(DrawerActions.toggleDrawer());
        }}
      >
        <MenuButton />
      </TouchableOpacity>
    </Layout>
  );
};

export default function AppStack() {
  return (
    <Stack.Navigator>
      <Stack.Screen
        options={{
          // eslint-disable-next-line react/display-name
          headerLeft: () => <HeaderLeft />,
        }}
        component={DrawerMenu}
        name="Drawer"
      />
    </Stack.Navigator>
  );
}
  

Я не хочу, чтобы заголовок находился рядом с моей кнопкой заголовка. Что странно, так это то, что когда я удаляю поле заголовка из

 const MenuButton = () => (
  <TopNavigation accessoryLeft={ToggleMenuAction} title="Eva Application" />
);
  

И сделайте это просто

 const MenuButton = () => (
  <TopNavigation accessoryLeft={ToggleMenuAction} />
);
  

Функция переключения просто перестает работать. Мне приходится нажимать кнопку меню несколько раз, чтобы переключать меню между открытием и закрытием, но когда заголовок есть, он работает плавно.

Почему это должно быть так?

Ответ №1:

Удаляя заголовок, вы уменьшаете область попадания (область, которая запускает событие onPress).
Вы можете увидеть область, установив цвет фона для осязаемой области.
Кроме того, нажатие на значок меню напрямую не запускает событие onPress, вам нужно щелкнуть по красному пробелу вокруг значка меню, чтобы вызвать его.
Таким образом, тот факт, что вам приходится нажимать несколько раз, скорее всего, сводится к попаданию в нужное место.

С заголовком:

 const MenuButton = () => (
  <TopNavigation accessoryLeft={ToggleMenuAction} title="Eva Application" style={{backgroundColor:'red'}}/>
);
  

введите описание изображения здесь

Без заголовка:

 const MenuButton = () => (
  <TopNavigation accessoryLeft={ToggleMenuAction} style={{backgroundColor:'red'}}/>
);
  

введите описание изображения здесь