2012-10-22 127 views
2

我知道这个问题已经出现在各种形式之前,但没有解决方案为我... 我使用钛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()同样的事情高度(这个返回0以及)O。 r getHeight()(返回自动)。我试着将它添加到父视图,然后再读取高度,但没有......我做的最后一件事是这样的:

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; 

回报一些数不过,它似乎,并没有被正确的高度。

+0

您正在研究哪个平台? iPhone,iPad或Android? –

+0

我正在为iPhone工作。将其编辑到问题中。 –

回答

5

您可以使用postlayout event

这里是示例代码,将让您的标签高度

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

希望帮助。 :)

+0

它的工作原理!非常感谢。 Titatanium有时候真的很奇怪。 –

+0

雅有时......但它是镇上最好的..:D快乐编码.. –

+0

如果我想根据以前的元素来定位我的元素的每一个我需要使用职位布局事件每次? – Tony

0

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

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