0

我正在像这样设置 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 中,但这没有效果,那么我如何将空行保留在默认高度?

4

3 回答 3

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;
}
于 2013-08-29T16:38:42.080 回答
0

一个空的 tableview 页脚就是答案。检查此答案以获取实施详细信息。

于 2013-08-29T19:17:55.543 回答
0

您所说的空单元格实际上只是实际单元格下方的表格视图绘制的线条。这些行的间距由最终单元格的高度决定。所以如果你想要一个特定的间距,你必须插入一个空白单元格作为最后一行,并在heightForRowAtIndexPath.

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

于 2013-08-29T16:57:00.840 回答