繁体   English   中英

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

[英]How to dynamically adjust the height of a UITableView cell

我正在尝试使用下面的代码动态调整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"
)

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

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

要么:

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

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

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

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

您可能需要检查它是否是最小高度,因为您有一些文本非常少的单元格。

在委托方法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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM