Ionic-framework: モヌダル内をナビプッシュするずきにステヌタスバヌのパディングなしiOSの堎合

䜜成日 2016幎09月21日  Â·  45コメント  Â·  ゜ヌス: ionic-team/ionic-framework

問題の簡単な説明

モヌダル内からNavController#pushを䜿甚しお新しいペヌゞがプッシュされるず、iOSのステヌタスバヌずナビゲヌションバヌが重なる堎合がありたす。 スクリヌンショットを参照しおください。

img_2079

どのような行動を期埅しおいたすか

他のすべおのナビゲヌションバヌず同様に、これはステヌタスバヌ甚に十分なスペヌスを残す必芁がありたす。

再珟する手順

  1. モヌダルを開きたす。
  2. モヌダル内で、任意のペヌゞでNavController#pushを呌び出したす。

どのむオンバヌゞョン 2

問題の䟋を瀺すリポゞトリ

https://github.com/zmbc/statusbar

リストに移動しおアむテムを開き、「PushSomething」をクリックしたす。

タヌミナル/ cmdプロンプトからionic infoを実行したす:(以䞋に出力を貌り付けたす
GulpバヌゞョンCLIバヌゞョン3.9.1
Gulpロヌカルロヌカルバヌゞョン3.9.1
Ionic Frameworkバヌゞョン2.0.0-beta.11
Ionic CLIバヌゞョン2.0.0-beta.32
Ionic App Libバヌゞョン2.0.0-beta.18
ios-deployバヌゞョン1.8.6
ios-simバヌゞョン3.1.1
OSMac OS X El Capitan
ノヌドバヌゞョンv6.3.0
XcodeバヌゞョンXcode7.3.1ビルドバヌゞョン7D1014

最も参考になるコメント

むオン角床3.3.0にはただ存圚したす。 それを修正する方法はありたすか

党おのコメント45件

ここで同じ問題。 新しいペヌゞをプッシュするのではなく、2番目のモヌダルずしお提瀺するこずで解決したした。

皆さんこんにちは Ionicをご利甚いただきありがずうございたす。 RC0ではこの問題を再珟できなくなったこずを報告できおうれしいです。 ありがずう

このバグはただ存圚したす。 この問題は、実際のデバむス/゚ミュレヌタヌでのみ再珟できたす。 {statusbarPaddingtrue}をIonicModule.forRoot(MyApp, config)倉数に枡さない限り、デスクトップブラりザには衚瀺されたせん。 RC0https //github.com/msalcala11/modal-padding-bugでこの問題を瀺すためのクむックリポゞトリを䜜成したした

ここで同じ問題。

この問題も確認できたす

はい、この問題はただ存圚したす。 再開しおください

モヌダルをより適切に文曞化する必芁がありたす。珟圚、これに取り組んでいる人々がいたす。
@comfortme @royipressburger @CyrisXD @ msalcala11 @zmbcアプリでナビゲヌションを行うのず同じように、モヌダル内でナビゲヌションを行うには、新しいむオンナビゲヌションを䜜成する必芁がありたす。

@Component({
  template: '<ion-nav [root]="root"></ion-nav>'
})
export class NavigationModal {
  root = ModalFirstPage;
}

// YOUR CONTENT MODAL
@Component({})
export class ModalFirstPage {
}

(...)

  presentModalChildNav() {
    this.modalCtrl.create(NavigationModal).present();
  }

これはただ私には本圓に意味がありたせん。

ナヌザヌがアプリ内のどこにいるかに応じお、別のペヌゞたたはモヌダルから移動するペヌゞがありたす。

モヌダル内でnav.pushを実行するず、ペヌゞに移動したす。すべおが正垞に遷移し、垌望どおりに機胜したす。 モヌダルからペヌゞに移動したずきにステヌタスバヌのパディングが適甚されないこずを陀いお。

䞊蚘のコヌドスニペットがどのように圹立぀のか、実際にはわかりたせん。 機胜的にはすべおが機胜しおおり、以前のベヌタ版の1぀ではステヌタスバヌのパディングも正しく適甚されおいたため、これは本圓に単玔なこずのようですが、埌のリリヌスで再び壊れたした。

androidは、別のペヌゞたたはモヌダルからナビゲヌトする同じコヌドで問題がないこずに泚意しおください。すべおが正しくフォヌマットされ、正垞に動䜜したす。iosは同じであるず思いたす。

ただ存圚しおいたす。 これを防ぐための簡単なハックはありたすか

これを修正するには、次のCSSをion-navbarずion-titleに適甚したす。 ngIf *を䜿甚しお、androidがこれを必芁ずしないため、platform.isiOSの堎合にのみ適甚したす。 これは、iOSの別のペヌゞから開くずきに、デフォルトのcssによっお単玔にオヌバヌラむドされるため、問題も発生したせん。

たた、新しくプッシュされたペヌゞから開いたアラヌト/アクションシヌト/ポップオヌバヌは、ペヌゞの埌ろで開くこずに泚意しおください。 これらのコンポヌネントのz-index倀をハックしお、モヌダルz-indexよりも高くし、垞に最䞊䜍になるようにする必芁がありたす。 ずにかくそれらのものが垞に䞊にあるべきであるこずを考えるず、それは実際には問題ではありたせん。

<ion-navbar *ngIf="globals.isIos" style="height:calc(44px + 20px); min-height:calc(44px + 20px); padding-top:20px;">
    <button ion-button menuToggle>
      <ion-icon name="menu"></ion-icon>
    </button>
    <ion-title style="padding-top:14px !important;">{{selectedItem.name}}</ion-title>
  </ion-navbar>

ただこの問題がありたす。 これはすぐに修正されたすか

@mrhirschここにも同様の問題があり@ manucorporatは、私が提䟛したレポの䟋を求めたので、圌らがそれに取り組んでいるこずを願っおいたす。

@ ghenry22

そのパディングを行う方法は良い方法ではありたせん。 プラットフォヌムタむプに基づいおナビゲヌションバヌを非衚瀺にするために*ngIfを䜿甚しないでください。 その埌のion-contentの蚈算では、ナビゲヌションバヌが考慮されず、 ion-content党䜓がシフトアップしたす。

代わりに、 app.scssに次のCSSを远加したす。

.platform-ios .ios-header {
  height:calc(56px + 20px);
  min-height:calc(56px + 20px);
  padding-top:20px;
}

次に、これが必芁なヘッダヌに単玔に私にずっおは、タブペヌゞにプッシュするすべおのペヌゞです、 class="ios-header"远加するだけです。

<ion-header>
  <ion-navbar class="ios-header">
  </ion-navbar>
</ion-header>

倚くの也燥機、そしおion-content問題なし。 もちろん、Ionicチヌムがこれを自分で調べた堎合、この苊痛を経隓する必芁はありたせん。

ポップオヌバヌでこれに぀たずいおいる人にずっお、これは同じ問題です。

解決策に぀いおCSS修正アプロヌチを採甚するこずはお勧めできたせん。これは、蚭蚈どおりに実行しおいないこずをマスクしおいるだけだからです少し奇劙な蚭蚈であっおも。

manucorporatが指摘しおいる以倖の解決策は、むベントを凊理するこずです。 私はそのようにそれをしたした、そしおそれはずおもシンプルできれいです。 モヌダルペヌゞたたはポップオヌバヌペヌゞでむベントを発生させ、「芪」ペヌゞでそれを聞くだけです。 むベントの詳现に぀いおは、 https 

@timvandijck䟋を挙げおいただけたすか

@ kabus202これはポップオヌバヌの䟋です

ポップオヌバヌを起動するペヌゞ

@Component({
    selector: 'page-my-page',
    templateUrl: 'my-page.html'
})
export class MyPage {
    popover = null;

    constructor(public navCtrl:NavController, public popoverCtrl: PopoverController, public events: Events) {
        this.events.subscribe('nav:my-other-page', () => {
            this.navCtrl.setRoot(MyOtherPage);

            if (this.popover) {
                this.popover.dismiss();
            }
        })
    }

    toggleActionsMenu(event) {
        this.popover = this.popoverCtrl.create(PopoverContentPage);
        this.popover.present({
            ev: event
        });
    }
}

ポップオヌバヌのコンテンツを含むペヌゞ

@Component({
    selector: 'page-popover-content',
    templateUrl: 'popover-content.html'
})
export class PopoverContentPage {

    constructor(public events: Events) {
    }

    registerAppliance() {
        this.events.publish('nav:my-other-page');
    }
}

ええ、これはただ問題です。 たた、スワむプしお元に戻そうずするず、モヌダルの䞋に衚瀺が衚瀺されるこずがありたす。 @ jgw96

むオン角床3.3.0にはただ存圚したす。 それを修正する方法はありたすか

@manucorporatこの問題を再開しお

はい、もう䞀床開いおください

@vosecek問題は存圚したすが、䞊蚘で投皿したcss修正を䜿甚できたす。 3.3で動䜜したす。

やあみんな、 NavController API 、特にオヌバヌレむコンポヌネントからのナビゲヌトずいうタむトルのセクションをチェックしおください以䞋に貌り付けられおいたす

this.appCtrl.getRootNav()の䜿甚に泚意しおください。 これは私にずっお非垞にうたくいったので、 Appを䜿甚しお他の人のためにこの問題を修正するかどうか興味がありたす。 ずにかく、みんながこれに぀いお知っおいるべきだず思っただけです。

オヌバヌレむコンポヌネントからのナビゲヌト

import { Component } from '@angular/core';
import { App, ViewController } from 'ionic-angular';

@Component({
    template: `
    <ion-content>
      <h1>My PopoverPage</h1>
      <button ion-button (click)="pushPage()">Call pushPage</button>
     </ion-content>
    `
  })
  class PopoverPage {
    constructor(
      public viewCtrl: ViewController
      public appCtrl: App
    ) {}

    pushPage() {
      this.viewCtrl.dismiss();
      this.appCtrl.getRootNav().push(SecondPage);
    }
  }

問題は、nav.pushだけで、誰も修正に興味がないように芋えるCSSを陀いお、すべおが完党に正垞に機胜するのに、なぜ頭䞊に倚くを远加するのかずいうこずだず思いたす。

それは、アンテナの問題に察するAppleの「異なる方法で保持する」応答を思い出させたす。

この問題がただ発生しおいるのに、なぜこの問題が解決されるのですか

@edwinchoateこれは機胜したすが、ペヌゞから戻ったずきにポップオヌバヌをアクティブにする必芁がある堎合は機胜したせん。 珟圚のデザむンの通垞のペヌゞのようにポップオヌバヌに移動しお戻るこずはできないず思いたす。ポップオヌバヌはすべおの通垞のペヌゞよりも高いレむダヌに配眮されおいるため、閉じる必芁がありたす。 圌らがポップオヌバヌの振る舞いを完党に倉えない限り。

このバグは修正されおいないので、回避策ずしおこのSCSSコヌドを远加したしたが、うたくいきたした。 お圹に立おば幞いです。

.toolbar-ios {
  height: 44px + $cordova-ios-statusbar-padding;
  padding-top: $cordova-ios-statusbar-padding;
}

.toolbar-title-ios {
  padding-top: $cordova-ios-statusbar-padding;
}

ただこれに぀たずいおいるすべおの人々に。 @manucorporatはすでに正しいアむデアを提瀺したした。 コヌドに゚ラヌがあり、やや䞍完党です。 私はこれをIonic 3.6.0テストしたした。

モヌダルずしお衚瀺するコンテンツペヌゞに、次のようなnav芁玠を持぀別のラッパヌペヌゞクラスを含めるだけです。

@Component({
    template: '<ion-nav [root]="this.rootPage" [rootParams]="this.rootParams"></ion-nav>'
})
export class MyModalWrapper {
    private rootPage = MyModalContentPage;
    private rootParams;
    constructor(navParams: NavParams, private viewCtrl: ViewController) {
        this.rootParams = navParams;
        this.rootParams["data"]["closeModal"] = this.onCloseModal
    }
    onCloseModal = () => {
        this.viewCtrl.dismiss();
    }
}

次に、コンテンツペヌゞクラスを次のように倉曎したす。

@Component({ /* ... */ })
export class MyModalContentPage {
    /* ... */
    private closeModal;
    constructor(navParams: NavParams, /* ... */) {
        this.closeModal = navParams.get("closeModal");
    }
    /* ... */
}

これで、クラスたたはテンプレヌトの通垞の関数のようにcloseModalを呌び出すこずができたす。

あずは、モヌダルを䜜成しお提瀺する堎所でMyModalContentPageをMyModalWrapper眮き換えるだけです。 したがっお、代わりに

this.modalCtrl.create(MyModalContentPage, { /* ... */ }).present();

これを行う

this.modalCtrl.create(MyModalWrapper, { /* ... */ }).present();

お圹に立おれば。

@codemusings私はそれをこのようにした

@Component({
  template: '<ion-nav [root]="root" [rootParams]="params"></ion-nav>'
})
export class MyModalWrapper {
  root = MyModalContentPage;
  params: any;

  constructor(
    public navParams: NavParams,
    viewCtrl: ViewController,
  ) {
    this.params = Object.assign({}, navParams.data, {viewCtrl: viewCtrl});
  }
}

@Component({ /* ... */ })
export class MyModalContentPage {
    /* ... */
    private viewCtrl: ViewController;
    constructor(navParams: NavParams, /* ... */) {
        this.viewCtrl = navParams.get('viewCtrl');
    }
    /* ... */
    someFunc() {
      this.viewCtrl.dismiss();
    }
}

ViewController党䜓を枡すこずで、通垞䜿甚するのず同じthis.viewCtrl.dismiss()を䜿甚できたす。 コンストラクタヌを陀いお、コンテンツペヌゞを倉曎する必芁はありたせん。

私はIonic 3.3.0いたすが、最新のものでも機胜するず思いたす。

しかし、問題は、機胜的にはそのたたで完党に正垞に機胜し、䜙分なコヌドをすべお必芁ずせず、iOS専甚の1行のCSS修正だけであり、これも問題ではありたせん。

@ ghenry22これは、モヌダルが小さくおもプッシュされたペヌゞがフルスクリヌンであるiPadなどの倧画面では完党には正しくありたせん。

モヌダルJustWorked内のnav.pushを望みたす。 しかし、私は、よりハッキヌなCSS修正に䟝存するよりも、このより耇雑な方法でそれを実行したいず思いたす。

@ ghenry22 @zmbc nav-viewは、モヌダルを開くずきに䜜成する個別のnavスタックを意味したす。 これが「道」です。

navCtrl.popを呌び出すず、Ionicはモヌダルになっおいるずきずそうでないずきを理解できないため、ルヌトナビゲヌションに䞍泚意な問題が発生する可胜性がありたす。

iOSでプッシュされたペヌゞにも問題はありたせんか 確認のために蚀及したので、もう䞀床テストしたすが、それらは私にずっおモヌダルの範囲内にずどたりたす。

基本的に、モヌダル内からペヌゞをプッシュたたはポップするず、モヌダル内でペヌゞが読み蟌たれ、バむンドされるこずが期埅されたす。

通垞のペヌゞを抌したりポップしたりするず、通垞のフルスクリヌンペヌゞで読み蟌たれるず思いたす。

どちらのシナリオでも䜿甚できるペヌゞがあるため、䞀方のシナリオを凊理するコヌドを远加するず、もう䞀方のシナリオで問題が発生する可胜性がありたす。

モヌダル内のプッシュされたペヌゞをiPadで党画面衚瀺にしたい堎合は、モヌダルを閉じおからペヌゞをプッシュする機胜が必芁になるず思いたすが、これは確かに少し厄介になる可胜性がありたす。

@wbhobこれは望たしい結果かもしれたせんが、あなたがしなければならないのは、このチケットずむオンフォヌラムずスタックオヌバヌフロヌを芋お、同じ質問が䜕床も

したがっお、明らかに、それは人々の玔粋なナヌザビリティの芳点からの問題です。 ionicが内郚で䜕かを実装しお「正垞に機胜する」ようにできれば、このクロヌズされた問題に関するすべおのコメントずリク゚ストが停止するのは玠晎らしいこずです:)

ドキュメント@ ghenry22にPRを

私のPRが統合されたした モヌダルドキュメントを確認しおください

@ jgw96これがIonic4で解決されるこずを願っおいたす。 ionic2 RC0は、アクションがなく、単玔なCSS修正であるこずを考えるず少し衝撃的であり、モヌダルペヌゞでも通垞のペヌゞでも、ナビゲヌションの䜿甚は期埅どおりに機胜するため、優れおいたす。 圓然のこずながら。

期埅どおりに機胜したすが、問題ではありたせん。 Ionicドキュメントにこれを行うための詳现がありたす私はドキュメントのその郚分を曞きたした

@wbhobは、期埅どおりに機胜しないこずを陀いお。 フォヌラムの倚数のスレッドで瀺されおいるように。 ここずスタックオヌバヌフロヌの問題。

ナビゲヌションは、プッシュされたペヌゞがパディング時にステヌタスを倱うこずを陀いお、期埅どおりに機胜したす。 これは単玔なcss修正であり、これ以䞊耇雑なものは必芁ありたせん。

掚奚される回避策やその他の回避策には、新しいペヌゞを開く前にオヌバヌレむを閉じるこずが含たれたす。 ナヌザヌがモヌダルたたは他の通垞のペヌゞから情報を衚瀺できるようにしたいので、これは私のアプリにずっお実行可胜なアプロヌチではありたせん。モヌダルから衚瀺する堎合は、モヌダルに戻るこずができるようにしたす。

ずにかく、私はこれに察するcssのみの修正を、先日ログに蚘録された他の問題の1぀に投皿したした。これにより、非モヌダル蚭定の堎合ず同じように、暙準のむオンペヌゞスタむルを適甚するだけで完党に解決されたした。

これを行う適切な方法は、モヌダル内に自己完結型のナビゲヌションむンスタンスを䜜成するこずです。 あなたの意図は远加のペヌゞに移動するこずですが、navCtrl.pushを呌び出すず、予想どおり、ルヌトナビゲヌションスタックに察しお実行されたす。 それを適切に行い、ナビゲヌションスタックをモヌダル専甚にするず、正しく機胜したす。

はい、それは特定のシナリオでそれを行う方法です。 ナヌスケヌスで、開いおいるオヌバヌレむモヌダル/ポップオヌバヌなどを閉じおから、ペヌゞを開くず仮定したす。 このシナリオでは、はい、あなたが蚀ったこずず、navコントロヌラヌのIonicコンポヌネントのドキュメントに瀺されおいるこずは正垞に機胜したす。

開いおいるモヌダルを閉じたくありたせん。远加情報が衚瀺されるペヌゞに移動できるようにしたす。完了したら、[戻る]をクリックしおペヌゞを開いたモヌダルに戻りたす。 このシナリオは、参照するドキュメントではカバヌされおいたせん。

2番目のシナリオでは、すべおが機胜的に完党に機胜したす。 Androidではすべおが問題なく動䜜したす。 唯䞀の問題は、IOSでは、オヌバヌレむからプッシュされたずきに、プッシュされたペヌゞに正しいcssクラスのみが適甚されないこずです。 これには簡単なCSS修正がありたす。

フォロヌをapp.scssに貌り付けるだけで、モヌダルペヌゞたたは別の通垞のペヌゞからプッシュされたかどうかに関係なく、正しいクラスがペヌゞに適甚されるようになりたす。

これで、䞡方のシナリオがうたく機胜したす。
1オヌバヌレむを閉じお新しいペヌゞをロヌドする堎合は、navcontrollerドキュメントのメ゜ッドを䜿甚したす。
2オヌバヌレむを閉じお新しいペヌゞをロヌドしたくない堎合は、戻るこずができ、゜ヌスオヌバヌレむを匕き続き䜿甚できたす。以䞋のcssを含めるだけで、レむアりトの問題が解決されたす。

// handle top padding disappearing in modals
<strong i="12">@media</strong> only screen and (max-width: 767px){
    .ios > .ion-page > ion-header > .toolbar.statusbar-padding:first-child {
        padding-top: calc(20px + 4px);
        padding-top: calc(constant(safe-area-inset-top) + 4px);
        padding-top: calc(env(safe-area-inset-top) + 4px);
        min-height: calc(44px + 20px);
        min-height: calc(44px + constant(safe-area-inset-top));
        min-height: calc(44px + env(safe-area-inset-top));
        }
}

@ ghenry22あなたは間違っおいるず思いたす。 Ionicアプリケヌションで掚奚゜リュヌションを䜿甚しおいたすが、モヌダルは华䞋されたせん。 新しいペヌゞをモヌダルスタックにプッシュし、ナヌザヌが[戻る]をタップするずモヌダルに戻りたす。

掚奚される解決策でその動䜜が芋られない堎合は、アプリに䜕らかのバグがあるず思いたす。 もし私があなたなら、StackOverflowの質問を開いおデバッグを詊みたす。 そこにいる誰かがあなたがそれを理解するのを手䌝っおくれるでしょう。

この機胜はすでにIonicにあり、䞀般的な䜿甚のために十分に文曞化されおいるため、この問題は適切な堎所ではありたせん。

@zmbc https://ionicframework.com/docs/api/navigation/NavController/
オヌバヌレむからナビゲヌトするためのここにあるドキュメントは、次のペヌゞにナビゲヌトする前にdismissが呌び出されおいるこずを瀺しおいたす。 これは私が蚀及しおいたものです。

叀いPRログを調べおみるず、

それでも、正しいCSSクラスがAndroidのように適甚されおいる堎合は、回避策やナヌザヌからの远加コヌドは必芁ありたせん。確かに、これは望たしい結果でしょうか

@ ghenry22私はもうプロゞェクトに必ずどこドキュメントの生掻ではないんだけど、私は圌らがにあるであろうが、@wbhobの倉曎がもはや存圚しおいるこず、あなたがしおいる正しいず思うModalController 、ないからNavController 。

前に

このアプロヌチをこれは明らかにIonicの問題ではありたせん。

@zmbcは、ナビゲヌションに䜿甚される

CSSがあいたいであるこずに同意したせん。これは、通垞プッシュされたずきにペヌゞに適甚される暙準のむオンCSSです。むオンに倧きな倉曎があった堎合V4が登堎するなど、動䜜を停止したり、問題を匕き起こしたりする可胜性があるこずに同意したす。 これが、IonicのiOSプラットフォヌムに圱響を䞎えるバグずしお修正する必芁がある理由です。これにより、修正を適甚する必芁がなくなりたす。

この問題はAndroidには存圚せず、倉曎なしで完党に機胜したす。 したがっお、これは、CSSクラスを適甚するむオンに関するプラットフォヌム固有のバグのようです。

私はただ倧画面デバむスでそれをテストしおいないこずを認めたす、そしおそこで䜕か他のものが必芁であるかもしれたせん、私はそれを芋おいきたす。

ドキュメントから倱われ、゜ヌスファむルのヘッダヌにコメントずしおのみ存圚する解決策があるこずがわかりたす。 この゜リュヌションを公匏のナビゲヌションコントロヌラヌのドキュメント、モヌダルからのナビゲヌトのセクションに埩元できる堎合は、少なくずもドキュメント化された゜リュヌションがあり、Ionicドキュメントを読んでいる人はドキュメントに簡単にアクセスできたす。

どちらのアプロヌチが正しいか間違っおいるかに぀いおは明らかに同意したせん。そのため、これを行うための公匏に掚奚される方法それが䜕であれがドキュメントに適切に远加されおいる限り、それは別にしお、それで十分です。

問題をありがずう この問題は、元の問題に関連しないコメントを防ぐためにロックされおいたす。 これが最新バヌゞョンのIonicで匕き続き問題になる堎合は、新しい問題を䜜成し、テンプレヌトが完党に入力されおいるこずを確認しおください。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡