diff --git a/tests/app/ui/root-view/mymodule/MyControl.ts b/tests/app/ui/root-view/mymodule/MyControl.ts
index d6455b3ab..d882094e3 100644
--- a/tests/app/ui/root-view/mymodule/MyControl.ts
+++ b/tests/app/ui/root-view/mymodule/MyControl.ts
@@ -10,6 +10,7 @@ export class MyControl extends stackLayoutModule.StackLayout {
var counter: number = 0;
var lbl = new label.Label();
+ lbl.id = "my-test-label";
var btn = new button.Button();
btn.text = "Tap me!";
btn.on(button.Button.tapEvent, (args: observable.EventData) => {
diff --git a/tests/app/ui/root-view/root-modules/gridlayout-root.xml b/tests/app/ui/root-view/root-modules/gridlayout-root.xml
index 7f55539dc..834d13602 100644
--- a/tests/app/ui/root-view/root-modules/gridlayout-root.xml
+++ b/tests/app/ui/root-view/root-modules/gridlayout-root.xml
@@ -1,2 +1,3 @@
+
\ No newline at end of file
diff --git a/tests/app/ui/root-view/root-modules/tabview-root.xml b/tests/app/ui/root-view/root-modules/tabview-root.xml
index 588b8cea5..89933d778 100644
--- a/tests/app/ui/root-view/root-modules/tabview-root.xml
+++ b/tests/app/ui/root-view/root-modules/tabview-root.xml
@@ -3,7 +3,7 @@
-
+
diff --git a/tests/app/ui/root-view/root-view-tests.ts b/tests/app/ui/root-view/root-view-tests.ts
index d45c593c8..1f308446d 100644
--- a/tests/app/ui/root-view/root-view-tests.ts
+++ b/tests/app/ui/root-view/root-view-tests.ts
@@ -1,5 +1,5 @@
import * as TKUnit from "../../TKUnit";
-import { Page } from "tns-core-modules/ui/page";
+import { Page, View } from "tns-core-modules/ui/page";
import { Frame, NavigationEntry, stack } from "tns-core-modules/ui/frame";
import { _resetRootView, getRootView } from "tns-core-modules/application";
import { TabView, TabViewItem } from "tns-core-modules/ui/tab-view";
@@ -65,10 +65,42 @@ export function test_gridlayout_rootview_css_applied() {
helper.assertViewBackgroundColor(rootView, "#0000FF");
};
+export function test_gridlayout_rootview_layout_updates() {
+ layout_invalidate_test("ui/root-view/root-modules/gridlayout-root");
+}
+
+export function test_custom_component_rootview_layout_updates() {
+ layout_invalidate_test("ui/root-view/root-modules/custom-component-root");
+}
+
+export function test_tabview_rootview_layout_updates() {
+ layout_invalidate_test("ui/root-view/root-modules/gridlayout-root");
+}
+
+function layout_invalidate_test(moduleName: string) {
+ var entry = { moduleName };
+
+ _resetRootView(entry);
+
+ var rootView = getRootView();
+ TKUnit.waitUntilReady(() => rootView.isLayoutValid);
+
+ const lbl = rootView.getViewById("my-test-label");
+
+ lbl.visibility = "collapse";
+ TKUnit.assertFalse(rootView.isLayoutValid);
+ TKUnit.waitUntilReady(() => rootView.isLayoutValid);
+
+ lbl.visibility = "visible";
+ TKUnit.assertFalse(rootView.isLayoutValid);
+ TKUnit.waitUntilReady(() => rootView.isLayoutValid);
+ TKUnit.waitUntilReady(() => lbl.isLayoutValid);
+}
+
export function tearDownModule() {
// reset the root to frame for other tests
const resetFrameRoot = createTestFrameRootEntry();
_resetRootView(resetFrameRoot.entry);
TKUnit.waitUntilReady(() => resetFrameRoot.page.isLoaded);
-}
\ No newline at end of file
+}
diff --git a/tns-core-modules/ui/core/view/view.ios.ts b/tns-core-modules/ui/core/view/view.ios.ts
index fbdb45b43..2c6ca8f4f 100644
--- a/tns-core-modules/ui/core/view/view.ios.ts
+++ b/tns-core-modules/ui/core/view/view.ios.ts
@@ -59,6 +59,10 @@ export class View extends ViewCommon {
if (nativeView) {
nativeView.setNeedsLayout();
}
+
+ if (this.viewController && this.viewController.view !== nativeView) {
+ this.viewController.view.setNeedsLayout();
+ }
}
public measure(widthMeasureSpec: number, heightMeasureSpec: number): void {