呼び出して新しい画面に移動するとNavController.navigateForward('/url')
、画面をスライドさせて表示する無料のネイティブアニメーションが表示されます。ページコンポーネント内のコンポーネントを使用しない限り、これは期待どおりに機能します。これを行うと、ページ内のコンポーネントを除いて、すべてが期待どおりにアニメーション化されます。
次のページに移動すると、コンテンツとタイトルがすべてスライドして表示されます。
<ion-header>
<h1>The Title</h1>
</ion-header>
<ion-content>
Some content...
</ion-content>
ただし、h1
タグをコンポーネントに抽出すると、「一部のコンテンツ...」のみがスライドして表示されます。「タイトル」はアニメーションなしで表示されます。
<ion-header>
<app-my-component>The Title</app-my-component>
</ion-header>
<ion-content>
Some content...
</ion-content>
それが起こっている理由は、Ionicion-title
がアニメーション化するために特定の場所にあることを期待しているためです。iOSページトランジションのソースコードを調べると、それを確認できます。
ここでわかるion-toolbar
ように、Ionicは次のように入力します。
const enteringToolBarEls = enteringEl.querySelectorAll(':scope > ion-header > ion-toolbar');
そしてここでそれはこのion-title
ようになります:
enteringTitle.addElement(enteringToolBarEl.querySelector('ion-title'));
でカスタムコンポーネントを使用すると、HTMLコードの構造が異なるため、これは機能しませんion-header
。
ion-header > your-component > ion-toolbar
ion-header
Ionicは、適切にアニメーション化するために特定の方法であると想定しているため、でカスタムコンポーネントを使用しないことをお勧めします。
そうは言っても、そこでカスタムコンポーネントを本当に使用する必要がある場合は、次のように独自のカスタムページトランジションを作成できます。
myAwesomeTransitionAnimation.ts
内容で新しいファイルを作成します。app.module.ts
デフォルトの代わりにその遷移を使用するようにファイルを編集します。imports: [
...
IonicModule.forRoot({
navAnimation: myAwesomeTransitionAnimation,
}),
],
これを行うion-nav
とion-router-outlet
、アプリケーション全体のデフォルトの「アニメーション」が上書きされることに注意してください。
iOS用に(Android用のデフォルトを使用して)オーバーライドしたいだけの場合は、このコメントを見てください:
let ionic = [
IonicModule.forRoot()
];
const platform = new Platform();
if (platform.is('ios')) {
ionic = [
IonicModule.forRoot({
navAnimation: myAwesomeTransitionAnimation,
})
]
}
そしてモジュールのインポートでは:
imports: [ ...ionic, ]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加