0

我知道这个问题已经被问过很多次了,但我很难找到正确的 iOS7 实现。

我有一个由从我的服务器检索 JSON 数据的数组填充的 tableview。该数据可以是任意长度。现在我只能得到 1 或 2 行,仅此而已。

有人对正确heightForRowAtIndexPath实施有任何提示吗?

谢谢

编辑(当前代码):

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath {
// Retrieve the line for this index (from JSON)

NSString *line = [myArray objectAtIndex:indexPath.row];
CGSize size = CGSizeZero;

size = [line boundingRectWithSize: (CGSize){640, CGFLOAT_MAX} options: NSStringDrawingUsesLineFragmentOrigin
                             attributes: @{ NSFontAttributeName: [UIFont systemFontOfSize:18]} context: nil].size;
return ceilf(size.height);
}
4

1 回答 1

0

您只需要heightForRowAtIndexPath正确实施,就像这样

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath {
    // Retrieve the line for this index (from JSON)
    NSString* line = ...

    // Measure it with UIKit
    // font is a UIFont* and should be prepared once when the view initialized
    // cellSize is a CGSize like (320, 10000), where 320 is the width of the cell, 10000 means we want it as high as needed
    CGSize sz = [line sizeWithFont:font constrainedToSize:cellSize lineBreakMode: NSLineBreakByWordWrapping];

    return sz.height;
}

对于cellForRowAtIndexPath,只需使标签适合整个单元格。

有关 NSString UIKit Additions 的更多信息,请参阅。请注意,该方法[sizeWithFont:constrainedToSize:lineBreakMode:]在 iOS 7 中已弃用,并已被另一种替换,但我不知道如何使用它 :)

于 2013-10-28T00:08:44.517 回答