0

我有一个应用程序,我想根据收到的消息字符串的内容更改单元格的高度。我在表格视图的侧面 hieghtforrow 委托方法中这样做。

int rowHeight =0.0f;

     UITableViewCell *cell = [ self.mtableview cellForRowAtIndexPath:indexPath.row];

    CGSize size = [cell.textLabel.text  sizeWithFont:[UIFont systemFontOfSize:13.0f] constrainedToSize:CGSizeMake(300, 5000) lineBreakMode:UILineBreakModeWordWrap];// calculate the height 

    rowHeight = size.height+10; // I use 10.0f pixel extra because depend on font

    return rowHeight;

但它并没有在我的应用程序中崩溃。有人可以看看这个吗?

4

2 回答 2

1

我想看看您的cellForRowAtIndexPath方法来了解您如何检索标签的文本。

您在呼叫方面处于正确的轨道上,sizeWithFont但您需要两件事才能成功确定这一点:

  1. 标签的字体大小(您在 13.0 中硬编码)
  2. 以及确定大小的文本(您试图从 UILabel 中提取)

(在 13.0 的代码中硬编码字体大小不一定是个好主意,因为如果你想为单元格更改它,你需要记住在 heightForRowAtIndexPath 和其他任何地方更改它,但这是一个不同的问题) .

与其从标签本身中提取文本,不如UILabel从您拥有的任何数据结构中确定文本,这些数据结构首先生成/包含文本。这就是为什么查看您的cellForRowAtIndexPath方法会有所帮助的原因。

不要cellForRowAtIndexPathheightForRowAtIndexPath任何一个调用,这些方法不打算以这种方式使用。

这是一个简单的示例,我可以在您发布cellForRowAtIndexPath代码时对其进行改进:

//ASSUME that self.arrayOfStrings is your data structure where you are retrieving the label's text for each row.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    int rowHeight =0.0f;
    NSString *stringToSize = [self.arrayOfStrings objectAtIndexPath:indexPath.row];
    CGSize size = [stringToSize  sizeWithFont:[UIFont systemFontOfSize:13.0f] constrainedToSize:CGSizeMake(300, 5000) lineBreakMode:UILineBreakModeWordWrap];
    rowHeight = size.height+10;
    return rowHeight;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.textLabel.text = [self.arrayOfStrings objectAtIndexPath:indexPath.row];
    return cell;
}
于 2012-10-20T13:36:31.540 回答
0

UITableViewCell *cell = [ self.mtableview cellForRowAtIndexPath:indexPath.row]; 从您的代码中删除。您不需要在 HeightForRow 方法中添加单元格。

于 2012-10-20T12:08:54.740 回答