1

设置内容后如何获取标签的宽度?没有设置初始宽度。

我在表格行中有两个标签,如下所示:

label 1 (label 2)

这里的宽度label 1最初没有设置。随着内容label 1的宽度变化,有时会导致重叠label 2

现在我的主要目标是动态设置label 2左侧,它不会与label 1. 我想这样做:

  1. 首先计算宽度label 1
  2. 然后设置左边label 2 = width of label 1 + 10

如果有其他方法请帮忙。

这里有一些代码

var win = Titanium.UI.createWindow({
    title: 'Cleos',
    backgroundImage: 'tablebg.png',
    navBarHidden: true,
});
var tableview = Titanium.UI.createTableView({
    backgroundColor: 'transparent',
    separatorStyle: Ti.UI.iPhone.TableViewSeparatorStyle.NONE,
    style: Titanium.UI.iPhone.TableViewStyle.PLAIN
});
win.add(tableview);
var modelData = new Array;
for (i = 0; i <= daga.length - 1; i++) { // `data` as json, comes from a source
    var row = Titanium.UI.createTableViewRow({
        height: 120.0,
        backgroundColor: 'transparent',
        selectedBackgroundColor: '#380710',
        hasDetail: true
    });
    var imageThumb = Titanium.UI.createImageView({
        image: '...',
        width: 100.0,
        height: 100.0,
        left: 4.0,
        top: 10.0
    });
    row.add(imageThumb);
    var name = Titanium.UI.createLabel({
        text: '...',
        font: {
            fontSize: 16,
            fontWeight: 'bold'
        },
        textAlign: 'left',
        color: '#fff',
        height: 30.0,
        top: 5.0,
        left: 110.0
    });
    row.add(modelname);
    var NumberOfImages = Titanium.UI.createLabel({
        text: '(' + 12 + ')',
        font: {
            fontSize: 16
        },
        width: 'auto',
        color: '#bfbebe',
        textAlign: 'left',
        height: 30.0,
        top: 5.0,
        left: '' // I want to set this `left  = width of label name`
    });
    row.add(NumberOfImages);
    modelData.push(row);
    tableview.setData(modelData);
}
win.open();
4

7 回答 7

6
var width = label.toImage().width;

这将获得图像的实际宽度或高度(以像素为单位),并考虑字体属性(大小、系列、重量)。

于 2012-12-09T11:31:44.070 回答
3
var labelWidth = label.width;

但要小心“自动”值,因为它们通常返回 0。应在将标签添加到视图后请求该值。

[更新] 如果NumberOfImages.left = name.width+name.left;不起作用,我会尝试计算宽度

var pixelPerChar = 8;
var pseudoWidth = name.text.length/pixelPerChar;
NumberOfImages.left = pseudoWidth + name.left;
于 2011-08-03T08:40:21.130 回答
1

将宽度和高度都设置为自动,然后它应该返回一个正确的值。

于 2011-08-03T08:42:30.707 回答
1

带有尺寸的钛标签auto往往很烦人(或者当我上次使用钛时);通常可行的解决方案是将它们放在TiView具有auto宽度或高度的 a 内,然后从视图中读取相关属性。

于 2011-08-06T06:44:34.240 回答
1

创建时将其宽度设置name为“自动”。

添加name到行后,您可以通过name.size.width

于 2011-11-20T05:46:16.830 回答
0

将宽度设置为“自动”似乎剪辑为 320(如果标签大于屏幕宽度,则标签不会停留在一行)。有没有办法让标签比屏幕大,自动宽度越过屏幕边缘

于 2011-11-15T19:50:01.193 回答
0

我在开始时也遇到了这种类型的问题。你,很容易解决这个问题,你用 %age(百分比)设置高度。这意味着,当您定义 label.height = 10% label.left = 5% 等时,它会计算屏幕当前高度并默认设置为百分比。

在这种用途中,我们也有利润。当我们改变方向时,它很容易发生,百分比。

谢谢

于 2012-02-08T12:32:15.983 回答