【问题标题】:How to get the actual height of a label with auto-height如何使用自动高度获取标签的实际高度
【发布时间】:2012-10-22 13:24:10
【问题描述】:

我知道这个问题以前曾以各种形式出现过,但没有一个解决方案适合我... 我正在使用 Titanium API 2.1.3,并为 iPhone 构建。

我用了很多常用的JS,所以我有这个:

exports.Header = function(title){
var l = Ti.UI.createLabel({
    text: title,
    height: 'auto',
    textAlign: 'left',
    color: '#989898',
    font: {fontSize: exports.defaultFontSize+10, fontFamily: exports.defaultFont, fontWeight: 'bold'}
});
return l;
};

我这样称呼标签:

var qLabel = gui.Header(question);
qLabel.top = 5;
qLabel.left = 10;
qLabel.right = 10;
qLabel.color = "#3B3B3B";
qLabel.font = {fontSize: gui.defaultFontSize+4, fontWeight: 'bold'};

到目前为止,我已经尝试了各种方法来获取标签的高度,例如:

qLabel.toImage().height // this returns auto
qLabel.getRect().height // this returns 0

与 getSize().height (这也返回 0)或 getHeight() (返回 auto)相同。我尝试先将它添加到父视图,然后读取高度,但什么也没有……我做的最后一件事是:

var qqv = Ti.UI.createView({ width: 'auto', height: 'auto' });

qqv.add(qLabel);
qLabel.show();

Ti.API.info(qLabel.rect.height);
Ti.API.info(qLabel.size.height);
Ti.API.info(qqv.rect.height);
Ti.API.info(qqv.size.height);

它们都返回 0。

在这一点上我变得非常绝望,我不知道这个问题是因为我使用的 API 版本还是其他......感谢任何帮助。

编辑: 经过反复试验,我发现

qLabel.toImage().height;

返回 一些 数字,但是,它似乎不是正确的高度。

【问题讨论】:

  • 您在哪个平台上工作? iPhone、iPad 还是安卓?
  • 我正在为 iPhone 工作。将其编辑到问题中。

标签: javascript label titanium uilabel titanium-mobile


【解决方案1】:

您可以使用postlayout event

这里是获取标签高度的示例代码

label.addEventListener('postlayout', function(e) {
    var label_height = e.source.rect.height;
    alert(label_height);
});

希望对您有所帮助。 :)

【讨论】:

  • 有效!非常感谢。钛有时真的很奇怪。
  • 如果我想根据前一个元素定位我的每个元素,我每次都需要使用 post layout 事件??
【解决方案2】:

我遇到了同样的问题,我不想在每个元素上都使用 postlayout 事件。相反,我使用了size 属性,它是只读的,包含元素的实际大小。我将此与布局后事件的事件数据进行了比较,它们给出了完全相同的值。

因此,如果您想获取元素的高度,我建议您使用$.label1.size.height 而不是一直添加事件侦听器。这对于您的应用程序的性能也会好很多,因为 postlayout 事件将被触发很多。

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2017-01-17
    相关资源
    最近更新 更多