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 {