2013-02-08 90 views
1

我想创建一个tableview,其中的单元格的高度是动态的。UITableViewCell里面的UILabel高度

到目前为止,我设法根据我添加的自定义UILabel设置单元格的高度。

与常规cell.textLabel它工作正常,但是当我使用我自己的标签出问题了。我只看到了一半的标签,但是当我上下滚动时,有时标签会延伸并显示所有文本......您可以看到标签应该在图像中结束的位置。

Image

这是cellForRowAtIndexPath中的文本:

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

// Configure the cell. 
Car *carForCell = [cars objectAtIndex:indexPath.row]; 

UILabel *nameLabel = [[UILabel alloc] init]; 
nameLabel = (UILabel *)[cell viewWithTag:100]; 
nameLabel.numberOfLines = 0; 
nameLabel.text = carForCell.directions; 
[nameLabel sizeToFit]; 

[nameLabel setBackgroundColor:[UIColor greenColor]]; 


return cell; 

回答

1

除非你对你发布的代码错别字,你似乎并没有在所有添加标签的单元格。您似乎也会每次创建一个新标签,然后用单元格的视图替换指针的内容(始终为零)。

尝试做这样的事情,然后再看看它的样子:

static NSString *CellIdentifier = @"Cell"; 

UILabel *nameLabel; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    nameLabel = [[UILabel alloc] init]; 
    nameLabel.tag = 100; 

    nameLabel.numberOfLines = 0; 
    [nameLabel setBackgroundColor:[UIColor greenColor]]; 

    [cell.contentView addSubview:nameLabel]; 
} 
else { 
    nameLabel = (UILabel *)[cell viewWithTag:100]; 
} 

// Configure the cell. 
Car *carForCell = [cars objectAtIndex:indexPath.row]; 

nameLabel.text = carForCell.directions; 
[nameLabel sizeToFit]; 

return cell; 

您还需要告诉每个单元需要被使用tableView:heightForRowAtIndexPath:委托方法是什么大小的tableView。这将意味着再次获得相关的对象Car并使用sizeWithFont:sizeWithFont:forWidth:lineBreakMode:

+0

我已经在'tableView:heightForRowAtIndexPath'方法中设置了单元格的高度,如图所示。我改变了'cellForRowAtIndexPath'中的代码,结果如下:[link](http://cl.ly/image/063e3Y0N2E05)。所有的文字都很引人注目,但宽度看起来很乱。 – 2013-02-08 18:36:23

+0

我认为这是'sizeToFit:'的问题 - 你可以使用'sizeWithFont:sizeWithFont:forWidth:lineBreakMode:'来计算标签大小吗? – ChrisH 2013-02-08 18:43:38

+0

似乎工作。在做出正确答案之前,我会再试一试。 :-) – 2013-02-08 18:52:06

0

你是如何设置单元格的高度?它应该在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

+0

计算高度我在'heightForRowAtIndexPath'中设置了高度,它已经很完美了。问题是标签不能伸展,它只是在细胞中间切割。 – 2013-02-08 18:40:52

0

您应该计算在下面的方法返回的UITableViewCell的高度来完成:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; 

在这里,你应该做你的你的应该多高初始计算。

例如:

CGSize textSize = [myString sizeWithFont:[UIFont systemFontOfSize:16] constrainedToSize:CGSizeMake(320, 9999)]; 
return textSize.height; 
相关问题