IOS heightForRowAtIndexPath,设置空单元格的高度

时间:2013-08-29 16:32:23

标签: ios

我正在设置heightForRowAtIndexPath,如下所示:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    /* Contains the string */
    NSString *allStrings = [self convertMainData:indexPath];


    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize = [allStrings sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];

    return labelSize.height + 20;
}

当表不为空时调用此方法,并且正确计算大小,现在问题是如果表中有数据,则所有单元格的高度都会更改:

http://img716.imageshack.us/img716/3025/yrgt.png

我试过在委托方法

中检查这个
if([tableview cellForRowAtIndexPath:IndexPath] == nil)
   return 20;

但是这会返回一个错误,我也尝试将其包装在!= nil中,但这没有效果,那么我如何将空行留在默认高度?

3 个答案:

答案 0 :(得分:0)

我假设单元格显示allStrings作为其内容。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    /* Contains the string */
    NSString *allStrings = [self convertMainData:indexPath];

    if(allStrings.length == 0)
    return 20.0f; // return default height. Adjust accordingly

    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize = [allStrings sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];

    return labelSize.height + 20;
}

答案 1 :(得分:0)

您所谓的空单元格实际上只是实际单元格下方的表格视图所绘制的线条。这些线的间距由最终单元格的高度决定。因此,如果您需要特定的间距,则必须在最后一行插入一个空白单元格,并在heightForRowAtIndexPath中返回该行的特定高度。

因此,Max提出的解决方案将起作用。您必须在数据模型中添加另一个条目作为最后一项,以便[self convertMainData:indexPath]为该项返回空字符串或nil。如果您需要更多详细信息,请分享您的数据模型的详细信息并查看控制器的数据源方法。

答案 2 :(得分:0)

一个空的tableview页脚就是答案。请查看此answer了解实施详情。