2016-11-10 3 views

Antwort

24

Wenn man durch den Code sieht, scheint es keine Option für die Position des Popover zu geben. Wenn das Popover jedoch geöffnet wird, weil der Benutzer auf etwas getippt hat, kann es durch das Klickereignis positioniert werden. Wir können dieses Wissen für die manuelle Positionierung als auch verwenden:

let pop = this.popoverCtrl.create(MyPopover); 

let ev = { 
    target : { 
    getBoundingClientRect :() => { 
     return { 
     top: '100' 
     }; 
    } 
    } 
}; 

pop.present({ev}); 

ein paar Dinge zu beachten:

  • Sie den Wert für top festlegen können, left oder beides.
  • Die Werte müssen in Pixel als Zahlen angegeben werden.
  • Wenn top oder left nicht angegeben ist, wird der übliche Positionierungsalgorithmus für diesen Wert verwendet.

Ich wäre glücklich zu wissen, ob es einen besseren Weg gibt, aber bis jetzt ist dies das Beste, was ich mir vorstellen konnte.

+0

arbeitete wie ein Charme! Danke :-) –

+0

Ausgezeichnet. Ich musste ein Popover auf einer OpenLayers Map positionieren und diese Lösung hat gut funktioniert. Ich musste jedoch einen anderen Ansatz wählen, weil ich das Overlay nicht loswerden konnte. BTW, Wie bist du zu dieser Lösung gekommen? Ist es dokumentiert? – daudihus

2

Obwohl der obige Code für einige Leute funktioniert, aber ich fand eine bessere Lösung, wo die cssClass auf Popover übergeben.

Zur Nutzung des CssClass zu machen, müssen Sie sie global in app.scss erklären, wie unten gezeigt:

.custom-popover .popover-content { 
 
    width: 80%; 
 
    top: 70px; 
 
    left: 30px; 
 
    bottom: 70px 
 
}

In Ihrem .ts Datei

, können Sie die Klasse wie unten passieren kann :

let popover = this.popoverCtrl.create(PopoverPage, {}, {cssClass: 'custom-popover'}); 
 

 
popover.present();

+0

In Ihrer '.custome-popover'-Klasse gibt es einen Tippfehler. – alex351

+0

Danke @ alex351, ich habe es geändert. – Mnemo

Verwandte Themen