0

我正在尝试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"
)
4

3 回答 3

2

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

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

或者:

if(description == nil)
    return 60;
else
    return 200;
于 2013-09-12T15:44:10.863 回答
0

您可以使用以下方法简单地返回字符串的高度:

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

当字符串被限制为 tableview 的宽度和特定字体时,这将返回字符串的高度。

您可能需要检查它是否是最小高度,以防您有一些文本很少的单元格。

于 2013-09-12T15:40:57.617 回答
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。

于 2013-09-12T15:51:41.603 回答