如何动态调整UITableView单元格的高度

时间:2013-09-12 15:37:22

标签: iphone ios objective-c uitableview

我正在尝试使用下面的代码动态调整UITableView单元格的高度。目前只调用return 200;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *description = [photosFromCommentsArray objectAtIndex:indexPath.row];

    NSLog(@"description is %@",description);

    if(description == NULL)
        return 60;

    else {
        return 200;
        }
}

描述的NSLog输出为:

正如您所看到的,有时我会在这种情况下返回return 60;,当它包含其他内容时,我希望它返回return 200;

2013-09-12 16:30:36.567 1000 [11619:907] description is <null>
2013-09-12 16:30:36.568 1000 [11619:907] description is <null>
2013-09-12 16:30:36.569 1000 [11619:907] description is <null>
2013-09-12 16:30:36.569 1000 [11619:907] description is <null>
2013-09-12 16:30:36.570 1000 [11619:907] description is (
    "http://****.net/uploads/nodes/1464/photos/a0d41e7834b5119884c6fa83aaffb3023f609c0e.jpeg"
)
2013-09-12 16:30:36.571 1000 [11619:907] description is (
    "http://****.net/uploads/nodes/1464/photos/739701d7609bcb65ce5293f3551773c6bb6a498d.jpeg"
)
2013-09-12 16:30:36.572 1000 [11619:907] description is (
    "http://****.net/uploads/nodes/1464/photos/99cf9e662b0d4f00e316bd2f8c01faddb20e9473.jpeg"
)
2013-09-12 16:30:36.572 1000 [11619:907] description is (
    "http://*****.net/uploads/nodes/1464/photos/a6680113da9567b8477810703e14616631c39a06.jpeg"
)

3 个答案:

答案 0 :(得分:2)

您没有说明如何初始化photosFromCommentsArray。所以,试试这个:

if(description == (id)[NSNull null])
    return 60;
else
    return 200;

或者:

if(description == nil)
    return 60;
else
    return 200;

答案 1 :(得分:0)

您可以使用以下命令返回字符串的高度:

        float height = [description sizeWithFont:[UIFont YOURFONT] constrainedToSize:CGSizeMake(tableView.frame.size.width, FLT_MAX) lineBreakMode:NSLineBreakByWordWrapping].height; 

当它被约束到tableview的宽度和特定字体时,它将返回字符串的高度。

如果您的某些单元格文本很少,您可能需要检查它是否为最小高度。

答案 2 :(得分:0)

在委托方法tableView:heightForRowAtIndexPath中:返回行的高度,从那里你可以调整单元格的高度到你需要的尺寸,以适应文本,图像等。

根据我的经验,最好的方法是

NSString* description =  [photosFromCommentsArray objectAtIndex:indexPath.row];
UITextView* dummyTextView = [[UITextView alloc] initWithFrame:CGRectMake(0,0,width_Of_Text_With_In_Cell, 1];
[dummyTextView sizeToFit];

return defaultHeight + dummyTextView.frame.size.height;

现在这看起来很奇怪而且值得怀疑,但是当我试图获得文本的确切高度时,值不会很好。使用textview,它每次都给我一个完美的大小。使用时

[string sizeWithFont:constrainedToSize:lineBreakMode:];

高度和宽度将根据文本的呈现方式而有所不同,这是有道理的,不同的字母具有不同的宽度和不同的高度,有时文本会下降到下一行,有时它不会,以及计算因为高度有时会被关闭....它给了我一个整体的麻烦。

如果您的内容位于UITextView中,此代码有效,调整标签或文本字段的大小会增加上述麻烦...,因此请确保您的描述是单元格中的textView。