diff --git a/apps/app/ui-tests-app/action-bar/main-page.ts b/apps/app/ui-tests-app/action-bar/main-page.ts
index e85974bad..b98d49d11 100644
--- a/apps/app/ui-tests-app/action-bar/main-page.ts
+++ b/apps/app/ui-tests-app/action-bar/main-page.ts
@@ -18,6 +18,8 @@ export function pageLoaded(args: EventData) {
examples.set("actionItemPosition", "action-bar/action-item-position");
examples.set("actBGCss", "action-bar/background-css");
examples.set("actTransparentBgCss", "action-bar/transparent-bg-css");
+ examples.set("modalHiddenActBar", "action-bar/modal-test-hidden-action-bar");
+ examples.set("modalShownActBar", "action-bar/modal-test-with-action-bar");
let viewModel = new SubMainPageViewModel(wrapLayout, examples);
page.bindingContext = viewModel;
diff --git a/apps/app/ui-tests-app/action-bar/modal-page-hidden-action-bar.ts b/apps/app/ui-tests-app/action-bar/modal-page-hidden-action-bar.ts
new file mode 100644
index 000000000..3641aaa7b
--- /dev/null
+++ b/apps/app/ui-tests-app/action-bar/modal-page-hidden-action-bar.ts
@@ -0,0 +1,11 @@
+import { ShownModallyData } from "tns-core-modules/ui/page";
+
+let closeCallback: Function;
+
+export function onShownModally(args: ShownModallyData) {
+ closeCallback = args.closeCallback;
+}
+
+export function onTap() {
+ closeCallback("sample text");
+}
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/action-bar/modal-page-hidden-action-bar.xml b/apps/app/ui-tests-app/action-bar/modal-page-hidden-action-bar.xml
new file mode 100644
index 000000000..31268c7c5
--- /dev/null
+++ b/apps/app/ui-tests-app/action-bar/modal-page-hidden-action-bar.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/action-bar/modal-page.ts b/apps/app/ui-tests-app/action-bar/modal-page.ts
new file mode 100644
index 000000000..3641aaa7b
--- /dev/null
+++ b/apps/app/ui-tests-app/action-bar/modal-page.ts
@@ -0,0 +1,11 @@
+import { ShownModallyData } from "tns-core-modules/ui/page";
+
+let closeCallback: Function;
+
+export function onShownModally(args: ShownModallyData) {
+ closeCallback = args.closeCallback;
+}
+
+export function onTap() {
+ closeCallback("sample text");
+}
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/action-bar/modal-page.xml b/apps/app/ui-tests-app/action-bar/modal-page.xml
new file mode 100644
index 000000000..3c46fdbdc
--- /dev/null
+++ b/apps/app/ui-tests-app/action-bar/modal-page.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/action-bar/modal-test-hidden-action-bar.ts b/apps/app/ui-tests-app/action-bar/modal-test-hidden-action-bar.ts
new file mode 100644
index 000000000..c862372fa
--- /dev/null
+++ b/apps/app/ui-tests-app/action-bar/modal-test-hidden-action-bar.ts
@@ -0,0 +1,13 @@
+import { EventData } from "tns-core-modules/data/observable";
+import { Page } from "tns-core-modules/ui/page";
+import { topmost } from "tns-core-modules/ui/frame";
+
+export function btnClick(args: EventData) {
+ (args.object).page.showModal("ui-tests-app/action-bar/modal-page", "", function (arg: string) {
+ // ...
+ }, true);
+}
+
+export function btnBack(args: EventData) {
+ topmost().goBack();
+}
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/action-bar/modal-test-hidden-action-bar.xml b/apps/app/ui-tests-app/action-bar/modal-test-hidden-action-bar.xml
new file mode 100644
index 000000000..868e6fa5f
--- /dev/null
+++ b/apps/app/ui-tests-app/action-bar/modal-test-hidden-action-bar.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/action-bar/modal-test-with-action-bar.ts b/apps/app/ui-tests-app/action-bar/modal-test-with-action-bar.ts
new file mode 100644
index 000000000..afa6731ec
--- /dev/null
+++ b/apps/app/ui-tests-app/action-bar/modal-test-with-action-bar.ts
@@ -0,0 +1,13 @@
+import { EventData } from "tns-core-modules/data/observable";
+import { Page } from "tns-core-modules/ui/page";
+import { topmost } from "tns-core-modules/ui/frame";
+
+export function btnClick(args: EventData) {
+ (args.object).page.showModal("ui-tests-app/action-bar/modal-page-hidden-action-bar", "", function (arg: string) {
+ // ...
+ }, true);
+}
+
+export function btnBack(args: EventData) {
+ topmost().goBack();
+}
\ No newline at end of file
diff --git a/apps/app/ui-tests-app/action-bar/modal-test-with-action-bar.xml b/apps/app/ui-tests-app/action-bar/modal-test-with-action-bar.xml
new file mode 100644
index 000000000..a8e373ad2
--- /dev/null
+++ b/apps/app/ui-tests-app/action-bar/modal-test-with-action-bar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tns-core-modules/ui/frame/frame.ios.ts b/tns-core-modules/ui/frame/frame.ios.ts
index 067eb19ec..749b9c6ca 100644
--- a/tns-core-modules/ui/frame/frame.ios.ts
+++ b/tns-core-modules/ui/frame/frame.ios.ts
@@ -45,7 +45,7 @@ export class Frame extends FrameBase {
super();
this._ios = new iOSFrame(this);
this.nativeView = this._ios.controller.view;
-
+
// When there is a 40px high "in-call" status bar, nobody moves the navigationBar top from 20 to 40 and it remains underneath the status bar.
let frameRef = new WeakRef(this);
application.ios.addNotificationObserver(UIApplicationDidChangeStatusBarFrameNotification, (notification: NSNotification) => {
@@ -202,6 +202,10 @@ export class Frame extends FrameBase {
super._updateActionBar(page);
+ if (page && this.currentPage && this.currentPage.modal === page) {
+ return;
+ }
+
page = page || this.currentPage;
let newValue = this._getNavBarVisible(page);
let disableNavBarAnimationCache = this._ios._disableNavBarAnimation;