我试图拥有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];
}
}
答案 0 :(得分:0)
我注意到heightForRowAtIndexPath:
来电[[collapsedChapters objectAtIndex:indexPath.row] boolValue] == YES
。我假设这意味着布尔值是一个切换,表示特定单元格是否“展开”,对吗?
如果是这样,几年前我遇到了完全相同的问题。而不是为整个表格提供一个部分,然后每个“章节”有一行,每个“章节”有一个部分,然后根据“章节”是否更改每个部分的行数展开或折叠 - 折叠为1行,展开为2行。对于扩展的“章节”,您将扩展信息放在该部分的第2行。
这种扩展章节的方法可以使用insertRowsAtIndexPaths:
并折叠,removeRowsAtIndexPaths:
,一切都会正常工作,包括用户期望的所有漂亮的表格视图动画。