读取(获取)textLabel的fontsize

时间:2012-04-18 17:45:08

标签: objective-c ios

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

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'

但不推荐使用单元格的getter“font”。是否有一种不推荐使用的方法来获取fontsize / textwidth?

2 个答案:

答案 0 :(得分:0)

同样烦人的问题。这似乎有效:

[cell layoutIfNeeded];

但不是......相当。由于一些奇怪的原因,它调整了字体大小,从大约17到大约20。

使用[UIFont boldSystemFontOfSize:[UIFont labelFontSize]]

答案 1 :(得分:-1)

通过明确设置字体大小,您可以获得文本标签的宽度。

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

以下是可能有用的链接:dynamic calculation of UILabel width in UITableViewCell

希望它有所帮助! :)