mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 03:31:45 +08:00
Fixed ios proxy view blocks layout requests
This commit is contained in:
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user