【问题标题】:Hide a view in Titanium so that it does not take physical space在 Titanium 中隐藏视图,使其不占用物理空间
【发布时间】:2017-04-24 01:31:34
【问题描述】:

在钛中,可以像这样隐藏视图:

$.foo.hide()

$.foo.visible = false

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

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

我该怎么做?

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    要做你想做的事,你需要在隐藏时删除视图并在显示时创建它,或者你可以以某种棘手的方式使用绝对布局

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

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

    【讨论】:

    • 二维矩阵方法似乎不起作用。它设法使视图消失,但不幸的是它仍然占用物理空间。
    • 尝试使用一些较小的比例值,例如 0.05,如果它也不起作用,那么您唯一的选择是减小高度/宽度或删除/添加视图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多