Titanium 隐藏钛合金视图,使其不占用物理空间

Titanium 隐藏钛合金视图,使其不占用物理空间,titanium,appcelerator,appcelerator-titanium,titanium-alloy,appcelerator-alloy,Titanium,Appcelerator,Appcelerator Titanium,Titanium Alloy,Appcelerator Alloy,在钛合金中,可以隐藏如下视图: $.foo.hide() 或 然而,在这两种情况下,物体似乎仍然占据物理空间。它只是隐形的。换句话说,它类似于CSS属性可见性:hidden 我希望它消失,并且在宽度或高度方面不占用任何物理空间,因此它类似于CSS属性display:none 我该怎么做 我拥有的最佳黑客解决方案如下: $.foo.width = 0; $.foo.height = 0; $.foo.left = 0; $.foo.right = 0; 但这意味着,当我想让它再次可见时,我必须

在钛合金中,可以隐藏如下视图:

$.foo.hide()

然而,在这两种情况下,物体似乎仍然占据物理空间。它只是隐形的。换句话说,它类似于CSS属性
可见性:hidden

我希望它消失,并且在宽度或高度方面不占用任何物理空间,因此它类似于CSS属性
display:none

我该怎么做

我拥有的最佳黑客解决方案如下:

$.foo.width = 0;
$.foo.height = 0;
$.foo.left = 0;
$.foo.right = 0;

但这意味着,当我想让它再次可见时,我必须将所有这些属性设置回它们的原始值,这是一件痛苦且难以维护的事情。

首先,不要害怕做一些硬编码;)

谈到您的查询,是的,隐藏视图确实只是从UI中隐藏它,但物理空间仍然存在

若要执行所需操作,您需要在“隐藏”时删除视图并在“显示”时创建它,或者您可以以某种巧妙的方式使用绝对布局

另一种方法是使用transform属性设置此视图的动画,如下所示:

// on hide
$.foo.animate({
   duration : 100,
   transform : Ti.UI.create2DMatrix({scale:0})
}, function () {
   $.foo.visible = false;
});


// on show
$.foo.visible = true;    // we need to make it visible again before resetting its UI state since we hid it after completion of animation in above code
$.foo.animate({
    duration : 100,
    transform : Ti.UI.create2DMatrix()  // passing empty matrix will reset the initial state of this view
});

这也可能有效,但从未尝试过:

// on hide
$.foo.transform = Ti.UI.create2DMatrix({scale:0});
$.foo.visible = false;

// on show
$.foo.visible = true;
$.foo.transform = Ti.UI.create2DMatrix();

2D矩阵方法似乎不起作用。它设法使视图消失,但不幸的是它仍然占用物理空间。请尝试使用较小的比例值,如0.05,如果它也不起作用,则您唯一的选择是降低高度/宽度或删除/添加视图
// on hide
$.foo.transform = Ti.UI.create2DMatrix({scale:0});
$.foo.visible = false;

// on show
$.foo.visible = true;
$.foo.transform = Ti.UI.create2DMatrix();