在iOS7中更新UITableViewCell高度

时间:2015-03-31 14:39:51

标签: ios uitableview ios7

我试图拥有UITableViewCell,当滚动时,会折叠到预览。

我设法用布尔值来做 - 就是 - 在cellForRowAtIndexPath中我在当前单元格之前更改了所有单元格的布尔数组。

在iOS8中它完美运行 - 问题是在iOS7 heightForRowAtIndexPath中仅在tableView Load上调用。

我知道我可以做:

[tableView beginUpdates];
[tableView endUpdates];

但我无法在cellForRowAtIndexPath(崩溃)

中进行此操作

我可以在哪里运行它?

代码:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([[collapsedChapters objectAtIndex:indexPath.row] boolValue] == YES)
    {
        return 73;
    }
    //else - calculate
    return 200; //the number is actually calculated - but simplifying
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell =[self generateChapterCell:tableView indexPath:indexPath];
        [self handleLastVisible];
        return cell;
}

- (void)handleLastVisible
{

    NSInteger lastVisibleChapter = [self getLastVisibleRowOfSection:self.tableView section:chaptersSectionNum];
    if (lastVisibleChapter > lastViewedChapter) //should work for -1 and 9999 as well
    {
        lastViewedChapter = lastVisibleChapter;
    }

    NSInteger firstVisibleChapter = [self getFirstVisibleRowOfSection:self.tableView section:chaptersSectionNum];
    if (firstVisibleChapter == -1)
    {
        //we are before - don't touch
        return;
    }

    NSNumber* yesObj = [NSNumber numberWithBool:YES];
    //in case of 9999 - we will stop at the end of the for loop - it's OK
    for (int i=0; i < [collapsedChapters count]; i++)
    {
        if (i == firstVisibleChapter)
        {
            break;
        }
        if ([[collapsedChapters objectAtIndex:i] boolValue] == NO)
        {
            [chapterFirstCollapse replaceObjectAtIndex:i withObject:yesObj];
        }
        [collapsedChapters replaceObjectAtIndex:i withObject:yesObj];
    }
}

1 个答案:

答案 0 :(得分:0)

我注意到heightForRowAtIndexPath:来电[[collapsedChapters objectAtIndex:indexPath.row] boolValue] == YES。我假设这意味着布尔值是一个切换,表示特定单元格是否“展开”,对吗?

如果是这样,几年前我遇到了完全相同的问题。而不是为整个表格提供一个部分,然后每个“章节”有一行,每个“章节”有一个部分,然后根据“章节”是否更改每个部分的行数展开或折叠 - 折叠为1行,展开为2行。对于扩展的“章节”,您将扩展信息放在该部分的第2行。

这种扩展章节的方法可以使用insertRowsAtIndexPaths:并折叠,removeRowsAtIndexPaths:,一切都会正常工作,包括用户期望的所有漂亮的表格视图动画。