在Titanium中隐藏视图,使其不占用物理空间

时间:2017-04-24 01:31:34

标签: titanium appcelerator appcelerator-titanium titanium-alloy appcelerator-alloy

在钛合金中,可以隐藏这样的视图:

$.foo.hide()

$.foo.visible = false

但是,在这两种情况下,对象似乎仍然需要物理空间。它只是看不见。换句话说,它类似于CSS属性visibility: hidden

我希望它能够消失,并且在宽度或高度方面没有任何物理空间,所以它类似于CSS属性display: none

我该怎么做?

我有最好的hacky解决方案如下:

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

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

1 个答案:

答案 0 :(得分:1)

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

来到您的查询,是的,隐藏视图只是将其隐藏在UI中,但物理空间仍然存在。

要做你想做的事,你需要删除hide&上的视图。在节目中创建它,或者您可以以某种棘手的方式使用绝对布局

其他方法可能是使用如下转换属性为此视图设置动画:

// 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();