Skip to main content
@capgo/capacitor-네이티브 네비게이션 UI & 시스템 오픈 소스

네이티브 네비게이션 Capacitor 플러그인

Capacitor WebView 위에 네이티브 네비게이션 바, 탭 바 및 전환 셸을 렌더링합니다.

설치

bun add @capgo/capacitor-native-navigation bunx cap sync
npm, pnpm 또는 yarn
  • npm install @capgo/capacitor-native-navigation
  • pnpm add @capgo/capacitor-native-navigation
  • yarn add @capgo/capacitor-native-navigation

데모

자연스러운 네비게이션 데모

자연스러운 네비게이션 데모는 Chrome, 탭 선택, SVG 아이콘 및 스타일링 옵션을 렌더링하는 애니메이션 WebP 데모입니다.

소스 자산
자연스러운 네비게이션 셸 데모는 네이티브 네비게이션 바, 탭 및 WebView 콘텐츠를 보여줍니다.
자연스러운 쉘
자연스러운 네비게이션 탭 흐름
흐름
자연스러운 SVG 아이콘 애니메이션
SVG 아이콘
자연스러운 네비게이션 옵션
스타일 옵션

사용 방법

Capacitor를 사용하는 방법

__CAPGO_KEEP_0__를 장치에서 테스트하세요

다운로드하여 Capgo 앱을 설치한 후 QR code 코드를 스캔하세요.

네이티브 네비게이션 플러그인 미리보기 QR code

@capgo/capacitor-네이티브-네비게이션을 사용하여

@capgo/capacitor-native-navigation 네이티브 상단 네비게이션, 하단 탭 창, 경로 전환 셸을 하나의 풀 스크린 Capacitor WebView 위에 렌더링합니다. 웹 프레임워크는 여전히 경로와 콘텐츠를 소유하고 있으면서 네이티브는 앱 프레임을 소유합니다.

설치 및 동기화

npm install @capgo/capacitor-native-navigation
npx cap sync

네이티브 프레임을 구성

import { NativeNavigation } from '@capgo/capacitor-native-navigation';

await NativeNavigation.configure({
  contentInsetMode: 'css',
  animationDuration: 360,
  colors: {
    tint: '#0f172a',
    inactiveTint: '#64748b',
  },
});

네이티브 네비게이션을 렌더링

await NativeNavigation.setNavbar({
  title: 'Inbox',
  subtitle: 'Native chrome',
  transparent: true,
  backButton: { visible: false },
  rightItems: [
    {
      id: 'compose',
      title: 'Compose',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 20h9"/><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z"/></svg>',
      },
    },
  ],
});

네이티브 탭바를 렌더링

await NativeNavigation.setTabbar({
  selectedId: 'inbox',
  labelVisibilityMode: 'selected',
  icons: true,
  colors: {
    dynamic: true,
    tint: '#0f172a',
    inactiveTint: '#64748b',
  },
  tabs: [
    {
      id: 'inbox',
      title: 'Inbox',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 4h16v16H4z"/><path d="m4 13 4 4h8l4-4"/></svg>',
      },
    },
    {
      id: 'search',
      title: 'Search',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"/><path d="m20 20-3-3"/></svg>',
      },
    },
  ],
});

네이티브 이벤트를 라우터에 연결

자연스러운 바는 intent를 내뿜습니다. 라우터는 여전히 경로 변경을 수행합니다:

await NativeNavigation.addListener('navbarBack', () => {
  router.back();
});

await NativeNavigation.addListener('navbarItemTap', ({ id }) => {
  if (id === 'compose') router.push('/compose');
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  router.push(`/${id}`);
});

경로 변경을 애니메이션화

일반 웹 경로 업데이트 주변에 전환 거래를 사용하세요:

const transition = await NativeNavigation.beginTransition({
  direction: 'forward',
});

router.push('/message/42');
await router.ready?.();

await NativeNavigation.setNavbar({
  title: 'Message',
  backButton: { visible: true, title: 'Inbox' },
});

await NativeNavigation.finishTransition({
  id: transition.id,
  direction: 'forward',
});

줌 전환 추가

카드, 그리드 아이템, 미디어 미리보기에서 열리는 경로에 대해 zoom 도우미를 사용하세요.

import { beginZoomTransition, finishZoomTransition } from '@capgo/capacitor-native-navigation';

const card = document.querySelector('[data-message-card]');
if (card) {
  const transition = await beginZoomTransition(card, { cornerRadius: 18 });

  router.push('/message/42');
  await router.ready?.();

  await NativeNavigation.setNavbar({
    title: 'Message',
    backButton: { visible: true, title: 'Inbox' },
  });

  await finishZoomTransition(undefined, {
    id: transition.id,
    cornerRadius: 18,
  });
}

내용을 원래 위치에 맞게 패딩하세요

그렇다면 contentInsetMode is css아이콘 선택

.page {
  padding-top: var(--cap-native-navigation-top);
  padding-bottom: var(--cap-native-navigation-bottom);
}

아이콘은 React 또는 Vue 노드가 아닌 native 디스크립터입니다. native 자산을 패키지하지 않으려면 SVG를 사용하세요:

SVG는 inline 지원

const icon = {
  svg: '<svg viewBox="0 0 24 24"><path d="M3 10.5 12 3l9 7.5"/></svg>',
  template: true,
  ios: { sfSymbol: 'house.fill' },
  android: { resource: 'ic_menu_view' },
};

내용을 원래 위치에 맞게 패딩하세요 path, line, polyline, polygon, circle그리고 rect일반적인 아이콘 세트인 Lucide 및 Feather를 포함합니다.

@capgo/capacitor-transitions과 combine

네이티브 네비게이션을 사용하여 네이티브 네비게이션 바, 탭 바, 안전 영역 인셋, 네이티브 인텐트 이벤트를 사용하세요. WebView 페이지 스택은 네이티브 크롬 아래에 사용하세요. @capgo/capacitor-transitions 두 패키지를 초기화하세요:

npm install @capgo/capacitor-native-navigation @capgo/capacitor-transitions
npx cap sync

페이지에 전환할 때 transition outlet을 유지하고 웹 바를 중복하지 마세요:

import { NativeNavigation } from '@capgo/capacitor-native-navigation';
import '@capgo/capacitor-transitions';
import { initTransitions, setupRouterOutlet, setDirection } from '@capgo/capacitor-transitions/react';

initTransitions({ platform: 'auto' });

const outlet = document.querySelector('cap-router-outlet');
if (outlet) {
  setupRouterOutlet(outlet, { platform: 'auto', swipeGesture: 'auto' });
}

await NativeNavigation.configure({
  contentInsetMode: 'css',
});

같은 라우터 액션으로 두 패키지를 제어하세요:

<cap-router-outlet platform="auto" swipe-gesture="auto">
  <cap-page>
    <cap-content slot="content" fullscreen>
      <main class="page">Inbox content</main>
    </cap-content>
  </cap-page>
</cap-router-outlet>

같은 라우터 액션으로 두 패키지를 드라이브하세요:

async function openMessage(id: string) {
  setDirection('forward');
  await router.push(`/messages/${id}`);
  await NativeNavigation.setNavbar({
    title: 'Message',
    backButton: { visible: true, title: 'Inbox' },
  });
}

await NativeNavigation.addListener('navbarBack', () => {
  setDirection('back');
  router.back();
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  setDirection('root');
  router.push(`/${id}`);
});

Full Reference @capgo/capacitor-transitions __CAPGO_KEEP_0__:

__CAPGO_KEEP_1__

Using @capgo/capacitor-native-navigation을 계속 사용하세요.

이 기능을 사용 중이라면 Using @capgo/capacitor-native-navigation을 사용 중이라면 @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-native-navigation과 연결하여 @capgo/capacitor-native-.navigation @capgo/capacitor-native-네비게이션 Getting Started의 구현 세부 사항을 확인하세요. Using @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-live-activities @capgo/capacitor-라이브-액티비티 Using @capgo/capacitor-live-activities의 native capability를 확인하세요. @capgo/capacitor-live-활동 @capgo/capacitor-라이브-활동 @capgo/capacitor-비디오 플레이어 사용 native 네이티브 기능을 위한 @capgo/capacitor-video-player.

FAQ

네이티브 네비게이션 플러그인 FAQ

네이티브 네비게이션 플러그인을 Capacitor 앱에 설치하는 방법은?

Run &quot;bun add @capgo/capacitor-네이티브 네비게이션&quot; (또는 &quot;npm install @capgo/capacitor-네이티브 네비게이션&quot;)를 실행한 후 &quot;bunx cap sync&quot;를 실행하여 iOS와 Android 프로젝트가 네이티브 code를 인식하도록 하세요. 그리고 앱 code에서 &quot;@capgo/capacitor-네이티브 네비게이션&quot;을 임포트하세요.

React, Vue 및 Angular와 함께 @capgo/capacitor-네이티브 네비게이션을 사용할 수 있나요?

Yes. Native Navigation is a Capacitor package, so it works with any web framework that runs inside Capacitor, including Ionic, React, Vue, Angular, Svelte and plain JavaScript.

어떤 Capacitor 버전을 @capgo/capacitor-native-navigation이 지원하는지 궁금하십니까?

Capgo plugins follow Capacitor&#39;s major version: use the plugin major version that matches your Capacitor major version (for example plugin v8 with Capacitor 8). The compatibility table in the GitHub README lists the maintained versions.

어떤 @capgo/capacitor-native-navigation이 무료이고 오픈 소스인가요?

Yes. The source code is public on GitHub at https://github.com/Cap-go/capacitor-native-navigation/ and the package is free to install from npm. Bug reports and pull requests are welcome.

code를 Native Navigation이 사용하는 경우 App Store 리뷰 없이 업데이트가 가능한가요?

code를 설치하거나 업그레이드하면 Native Navigation이 변경되므로 새로운 스토어 빌드를 필요로 합니다. 그 후에 JavaScript, HTML 및 CSS 변경 사항이 플러그인을 호출하는 경우 Capgo Live Update와 함께 즉시 배포할 수 있습니다.

네이티브 네비게이션 변경 사항을 앱 리뷰 기다리지 않고 배포할 수 있습니다.

플러그인이 스토어 빌드에 포함되면, Capgo Live Update는 사용자에게 몇 분 안에 자바스크립트, HTML 및 CSS 변경 사항을 푸시합니다.

시작하기 Capgo