|
13 | 13 | // limitations under the License. |
14 | 14 |
|
15 | 15 | import { Component, OnDestroy, ViewChild, ChangeDetectorRef } from '@angular/core'; |
16 | | -import { IonicPage, NavController, NavParams } from 'ionic-angular'; |
| 16 | +import { IonicPage, NavController, NavParams, Platform } from 'ionic-angular'; |
17 | 17 | import { CoreAppProvider } from '@providers/app'; |
18 | 18 | import { CoreSitesProvider } from '@providers/sites'; |
19 | 19 | import { CoreEventsProvider } from '@providers/events'; |
@@ -45,13 +45,21 @@ export class CoreMainMenuPage implements OnDestroy { |
45 | 45 | protected pendingRedirect: any; |
46 | 46 | protected urlToOpen: string; |
47 | 47 | protected mainMenuId: number; |
| 48 | + protected keyboardObserver: any; |
48 | 49 |
|
49 | 50 | @ViewChild('mainTabs') mainTabs: CoreIonTabsComponent; |
50 | 51 |
|
51 | | - constructor(private menuDelegate: CoreMainMenuDelegate, private sitesProvider: CoreSitesProvider, navParams: NavParams, |
52 | | - private navCtrl: NavController, private eventsProvider: CoreEventsProvider, private cdr: ChangeDetectorRef, |
53 | | - private mainMenuProvider: CoreMainMenuProvider, private linksDelegate: CoreContentLinksDelegate, |
54 | | - private linksHelper: CoreContentLinksHelperProvider, private appProvider: CoreAppProvider) { |
| 52 | + constructor(protected menuDelegate: CoreMainMenuDelegate, |
| 53 | + protected sitesProvider: CoreSitesProvider, |
| 54 | + navParams: NavParams, |
| 55 | + protected navCtrl: NavController, |
| 56 | + protected eventsProvider: CoreEventsProvider, |
| 57 | + protected cdr: ChangeDetectorRef, |
| 58 | + protected mainMenuProvider: CoreMainMenuProvider, |
| 59 | + protected linksDelegate: CoreContentLinksDelegate, |
| 60 | + protected linksHelper: CoreContentLinksHelperProvider, |
| 61 | + protected appProvider: CoreAppProvider, |
| 62 | + protected platform: Platform) { |
55 | 63 |
|
56 | 64 | this.mainMenuId = this.appProvider.getMainMenuId(); |
57 | 65 |
|
@@ -110,6 +118,21 @@ export class CoreMainMenuPage implements OnDestroy { |
110 | 118 |
|
111 | 119 | window.addEventListener('resize', this.initHandlers.bind(this)); |
112 | 120 |
|
| 121 | + if (this.platform.is('ios')) { |
| 122 | + // In iOS, the resize event is triggered before the keyboard is opened/closed and not triggered again once done. |
| 123 | + // Init handlers again once keyboard is closed since the resize event doesn't have the updated height. |
| 124 | + this.keyboardObserver = this.eventsProvider.on(CoreEventsProvider.KEYBOARD_CHANGE, (kbHeight) => { |
| 125 | + if (kbHeight === 0) { |
| 126 | + this.initHandlers(); |
| 127 | + |
| 128 | + // If the device is slow it can take a bit more to update the window height. Retry in a few ms. |
| 129 | + setTimeout(() => { |
| 130 | + this.initHandlers(); |
| 131 | + }, 250); |
| 132 | + } |
| 133 | + }); |
| 134 | + } |
| 135 | + |
113 | 136 | this.appProvider.setMainMenuOpen(this.mainMenuId, true); |
114 | 137 | } |
115 | 138 |
|
@@ -221,5 +244,6 @@ export class CoreMainMenuPage implements OnDestroy { |
221 | 244 | this.redirectObs && this.redirectObs.off(); |
222 | 245 | window.removeEventListener('resize', this.initHandlers.bind(this)); |
223 | 246 | this.appProvider.setMainMenuOpen(this.mainMenuId, false); |
| 247 | + this.keyboardObserver && this.keyboardObserver.off(); |
224 | 248 | } |
225 | 249 | } |
0 commit comments