【问题标题】:UITableView reloadRowsAtIndexPaths performing animation when it shouldn'tUITableView reloadRowsAtIndexPaths 在不应该执行动画时执行
【发布时间】:2011-06-01 06:30:51
【问题描述】:

我在我的 iOS 应用中使用 UITableView,最近遇到了一个奇怪的问题。

假设我的表格结构如下:

section 1 header
row 
section 2 header
section 3 header
row
row 
...

(请注意,第 2 部分没有行)

我正在通过

对表中的行进行更新
    [self.tv beginUpdates];
    [self.tv reloadRowsAtIndexPaths:ip withRowAnimation:UITableViewRowAnimationNone];
    [self.tv endUpdates];

我不希望发生任何动画。我只想更新该行。问题在于,此策略适用于我的表 except 第 3 节第 1 行:最后一节的第一行。当我更新这一行(它确实使用了正确的 indexPaths),而不是没有动画时,该行会做这个小跳跃,就像它在新行中滑动以替换旧行或其他东西一样。该行略微向上滑动,然后又向下滑动,就好像我在插入一行一样。我猜它与标题计算有关,但我确实返回了 heightForHeaderInSection 的正确值。

有人见过这种行为吗?

【问题讨论】:

  • 我在 iOS5 中也看到了这一点。你找到解决办法了吗?
  • 我从来没有找到解决办法,没有。
  • 在 iOS 7 上仍然遇到同样的问题。您找到任何解决方案了吗?

标签: uitableview ios


【解决方案1】:

我想知道在这种仅重新加载的情况下是否需要 beginUpdates 和 endUpdates。

【讨论】:

  • 您是否尝试过更改 withRowAnimation 参数以检查它是否至少按照您的要求进行动画处理?
  • 嗯,它实际上并没有按照我告诉它的方式制作动画。无论我指定哪种动画,它总是会进行小跳。这意味着什么?
【解决方案2】:

我遇到了同样的问题。解决方案是使用以下方法从表中获取单元格:

UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath]

然后使用自定义设置方法或简单地调用手动刷新它:

[cell setNeedsLayout]

有关详细信息,请参阅:

UITableView reloadRowsAtIndexPaths graphical glitch

【讨论】:

  • 这个解决方案对我不起作用。在 NSFetchedResultsChangeMove 我试图更新单元格以及调用 moveRowAtIndexPath.
猜你喜欢
  • 2016-08-24
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
相关资源
最近更新 更多