在调用reloadSections:withRowAnimation:method之后,最初可见的单元格变得不可见

Beh*_*çar 10 iphone footer uitableview

我想显示一个包含多个部分的表,最初只显示3个部分的元素.当用户点击部分页脚时,部分页脚会丢失(变为零),并且该部分的所有元素都将显示给用户.

出于这个原因,当用户点击部分页脚时,我调用下面的代码:

-(void)loadMoreRowsInSection:(NSInteger)section {
    [groupStates replaceObjectAtIndex:section withObject:[NSNumber numberWithBool:YES]];
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:NO];
}
Run Code Online (Sandbox Code Playgroud)

我有以下代码来显示部分页脚:

-(UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    int count = [[(NSDictionary*)[filters objectAtIndex:section] valueForKeyPath:@"values.value"] count];
    if (count>3&&![[groupStates objectAtIndex:section] boolValue]) {
        LoadMoreFooter* loadMoreFooter = [[LoadMoreFooter alloc] initWithParent:self Section:section];
        return [loadMoreFooter view];
    }   
    else return nil;
}
Run Code Online (Sandbox Code Playgroud)

当用户点击部分页脚并调用loadMoreRowsInSection函数时,将重新加载此部分,但该部分的当前行将消失.当我向上滚动时,使行离开屏幕再次出现,行再次出现.

如果我打电话reloadData而不是reloadSections:withRowAnimation:,没有问题,但重新加载所有表似乎不是一个好主意.另外,reloadTable中没有动画.

有谁遇到过这个问题?

Acc*_*yyc 24

从某种意义上说,这是一个"静态"单元格,您自己会对它进行引用吗?在这种情况下,问题可能是这样的:

当您进行动画重新加载时,表格视图将淡出现有单元格,同时淡入新单元格.问题是,当"新"单元格与旧单元格完全相同时,同一单元格将同时淡入和淡出!在您的情况下,淡出动画优先,单元格被隐藏.

这是一些可能的解决方案:

  1. 而不是静态单元格,有一个可重复使用的"包装单元格"子类 - 一个单元,其唯一目的是包含一个包装视图.然后,保持对视图的静态引用,并将它们添加到出列的包装单元格中cellForRowAtIndexPath:

  2. 避免重新加载静态单元格的索引路径 - 而是这样做 [UIView transitionWithView:self.myStaticCell duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:nil completion:nil]


vak*_*kio 6

我也有这个问题.我使用的是UITableViewRowAnimationNone,由于某些原因仍然会动画部分(reloadData不能这样做),但它也会在动画后正确显示.


Fra*_*itt 6

reloadData在调用reloadSections:withRowAnimation:出现后添加调用 to修复消失的单元格问题,同时不影响动画。


Ben*_*her 1

我遇到了类似的问题,节标题无论在哪里都会被卡住。尽管即使在屏幕上滚动/滚动时我的问题仍然存在:

iPhone应用程序截图

我发现解决这个问题的唯一方法就是使用而reloadData不是reloadSections:withRowAnimation:.