【问题标题】:Initally visible cells gets invisible after calling reloadSections:withRowAnimation: method调用 reloadSections:withOut Animation: 方法后,最初可见的单元格变得不可见
【发布时间】:2011-03-09 02:38:16
【问题描述】:

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

因此,当用户点击节页脚时,我调用以下代码:

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

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

-(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;
}

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

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

有人遇到过这个问题吗?

【问题讨论】:

  • -reloadSections:withRowAnimation:的第二个参数不是BOOL;这是一个UITableViewRowAnimation 类型

标签: iphone uitableview footer


【解决方案1】:

在您自己保留对它的引用的意义上,这是一个“静态”单元格吗?在这种情况下,问题可能是这样的:

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

以下是一些可能的解决方案:

  1. 有一个可重用的“包装器单元”子类,而不是静态单元格 - 一个单元格,其唯一目的是包含一个包装的视图。然后,改为保留对视图的静态引用,并将它们添加到cellForRowAtIndexPath:中的出列包装单元中@

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

【讨论】:

  • 宾果游戏——这正是我正在做的事情
  • 很好的解释 - 它帮助我找到了问题的核心......我通过在使用淡入淡出动画调用 reloadSections 后添加此代码来解决这个“静态单元格”问题...... [UIView animateWithDuration:0.3延迟:0.3 选项:0 动画:^{ self.yourCell.alpha = 1.0f; } 完成:无];
【解决方案2】:

我也有这个问题。我改用了UITableViewRowAnimationNone,它仍然会出于某种原因为该部分设置动画(reloadData 不会这样做),但它也会在动画之后正确显示它。

【讨论】:

    【解决方案3】:

    在调用reloadSections:withRowAnimation: 之后添加对reloadData 的调用似乎可以解决消失的单元格问题,而不会影响动画。

    【讨论】:

    • @Frank 这不会有效地刷新表格两次吗?
    【解决方案4】:

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

    我发现修复它的唯一方法是使用reloadData 而不是reloadSections:withRowAnimation:

    【讨论】:

      【解决方案5】:

      我的错误是:我有一个包含多个部分的 TableView。当我选择一个部分进行展开(并显示单元格)时,上面的其他部分被隐藏了。

      我将标题视为单元格。

      我没有reloadData()的解决方案:

      inside override func viewDidLoad() 方法我使用的是这段代码:

      tableTeams.registerNib(UINib(nibName: "header", bundle: nil ), 
      forCellReuseIdentifier: "HeaderCell")
      

      但我应该使用这个:

      tableTeams.registerNib(UINib(nibName: "header", bundle: nil),
      forHeaderFooterViewReuseIdentifier: "HeaderCell")
      

      func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 内部,我会使用以下代码:

      func tableView(tableView: UITableView, viewForHeaderInSection section:
      Int) -> UIView? {
            let cell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("HeaderCell")
      as! CustomHeaderUiView
      

      我希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-13
        • 2011-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多