2

我使用 UITableViewController 的子类。在此表中,我使用带有 style 的标准单元格UITableViewCellStyleDefault。此样式包含一个textLabel. 我将一些文本分配给它的文本属性,然后我需要文本的长度(以磅为单位):

cell = [tableView dequeueReusableCellWithIdentifier:@"CellID"];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellID"];
}
cell.textLabel.text = @"some text";
textWidth = [cell.textLabel.text sizeWithFont:cell.textLabel.font].width;

NSLog(@"text width = %f",textWidth);
NSLog(@"Font = '%@'",cell.textLabel.font);

但是当我执行这段代码时,它返回的宽度为 0.00000:

text width = 0.000000
Font = '<UICFFont: 0x68b4a90> font-family: "Helvetica"; font-weight: bold; font-style: normal; font-size: 0px'

我必须做什么才能获得此文本的实际宽度(通常显示且宽度不为 0)

编辑:
当我插入一行代码时if (cell.font){},我得到正确的大小和宽度:

cell = [tableView dequeueReusableCellWithIdentifier:@"CellID"];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellID"];
}
cell.textLabel.text = @"some text";

// added line:
if (cell.font){}

textWidth = [cell.textLabel.text sizeWithFont:cell.textLabel.font].width;

NSLog(@"text width = %f",textWidth);
NSLog(@"Font = '%@'",cell.textLabel.font);

显示这个:

text width = 98.000000
Font = '<UICFFont: 0x68dc400> font-family: "Helvetica"; font-weight: bold; font-style: normal; font-size: 20px'

但是不推荐使用单元格的吸气剂“字体”。是否有不推荐使用的方法来获取字体大小/文本宽度?

4

2 回答 2

0

Same annoying problem. This seemed to work:

[cell layoutIfNeeded];

but doesn't... quite. For some strange reason it resizes the font, from about 17 to about 20.

Use [UIFont boldSystemFontOfSize:[UIFont labelFontSize]].

于 2012-05-13T07:33:35.740 回答
-1

可能通过显式设置字体大小,可以获得文本Label的宽度。

CGSize textLabelSize = [textLabel.text sizeWithFont:[UIFont systemFontOfSize:17]];

这是一个可能有帮助的链接:UITableViewCell中UILabel宽度的动态计算

希望能帮助到你!:)

于 2012-04-18T17:50:16.300 回答