Fixed ios proxy view blocks layout requests

This commit is contained in:
vakrilov
2016-02-03 15:38:48 +02:00
parent 96bafff573
commit 57f15abf27
2 changed files with 37 additions and 6 deletions

View File

@ -161,6 +161,32 @@ export function test_insert_after_porxy() {
helper.buildUIAndRunTest(outer, testAction); helper.buildUIAndRunTest(outer, testAction);
} }
export function test_proxy_does_not_stop_request_layout_bubble() {
var outer = new StackLayout();
var proxy = new ProxyViewContainer();
outer.addChild(createBtn("1"));
outer.addChild(proxy);
var btn = createBtn("2");
proxy.addChild(btn);
function testAction(views: Array<viewModule.View>) {
assertNativeChildren(outer, ["1", "2"]);
waitUntilElementLayoutIsValid(outer);
TKUnit.assert(outer.isLayoutValid, "outer container isLayoutValid should be true");
btn.requestLayout();
TKUnit.assertFalse(outer.isLayoutValid, "outer container isLayoutValid should be invalidated here");
};
helper.buildUIAndRunTest(outer, testAction);
}
function waitUntilElementLayoutIsValid(view: View, timeoutSec?: number): void {
TKUnit.waitUntilReady(() => {
return view.isLayoutValid;
}, timeoutSec || 1);
}
function createBtn(text: string): Button { function createBtn(text: string): Button {
var b = new Button(); var b = new Button();
b.text = text; b.text = text;

View File

@ -18,18 +18,23 @@ import {LayoutBase} from "ui/layouts/layout-base";
// - Android: _onDetached calls _removeViewFromNativeVisualTree recursively when the proxy is removed from its parent. // - Android: _onDetached calls _removeViewFromNativeVisualTree recursively when the proxy is removed from its parent.
export class ProxyViewContainer extends LayoutBase implements definition.ProxyViewContainer { export class ProxyViewContainer extends LayoutBase implements definition.ProxyViewContainer {
// No native view for proxy container. // No native view for proxy container.
get ios(): any { get ios(): any {
return null; return null;
} }
get android(): any { get android(): any {
return null; return null;
} }
get _nativeView(): any { get _nativeView(): any {
return null; return null;
} }
get isLayoutRequested(): boolean {
// Always return false so all layout requests from children bubble up.
return false;
}
public _createUI() { public _createUI() {
// //
} }
@ -70,7 +75,7 @@ export class ProxyViewContainer extends LayoutBase implements definition.ProxyVi
// Add last; // Add last;
insideIndex = this._getNativeViewsCount(); insideIndex = this._getNativeViewsCount();
} }
trace.write("ProxyViewContainer._addViewToNativeVisualTree at: " + atIndex + " base: " + baseIndex + " additional: " + insideIndex, trace.categories.ViewHierarchy); trace.write("ProxyViewContainer._addViewToNativeVisualTree at: " + atIndex + " base: " + baseIndex + " additional: " + insideIndex, trace.categories.ViewHierarchy);
return parent._addViewToNativeVisualTree(child, baseIndex + insideIndex); return parent._addViewToNativeVisualTree(child, baseIndex + insideIndex);
} }