【问题标题】:UITableView reloadRowsAtIndexPaths hides rowUITableView reloadRowsAtIndexPaths 隐藏行
【发布时间】:2012-07-28 08:03:27
【问题描述】:

我将 UITableView 与静态单元格一起使用。 如果我使用reloadData,则一切正常。

如果我尝试 reloadRowsAtIndexPaths 它会隐藏行。如果我上下拖动 tableView(当单元格更新时),则会出现行。

【问题讨论】:

    标签: uitableview ios5


    【解决方案1】:

    如果您的表格单元格是静态的(即,您使用相同的单元格对象来替换当前显示的单元格对象),那么您看到的是过渡动画的产物。

    这样想。假设您设置了 UITableViewAnimationOptionFade。当要替换单元格时,要替换的单元格(在本例中是完全相同的对象)添加了淡入动画。然后,被替换的单元格(同样,它都是同一个对象)添加了一个淡出动画。最后,单元格实际上是存在的,但它是不可见的,因为淡出动画使该单元格对象不可见。

    在非静态表格视图中,替换单元格与要替换的单元格是不同的对象,这不是问题,因为动画被添加到两个不同的对象。

    【讨论】:

    • 我不知道框架/推荐模式如何确保单元格实际上是不同的。 dequeueReusableCellWithIdentifier 是否有可能返回与被隐藏单元相同的可重用单元?在我看来,Apple 应该只是修复这个错误。它没有理由不能通过简单的检查来支持这两种情况,看看新单元格是否 == 旧单元格。
    • 我没找到。我猜是归档雷达。
    • 很好的解释。那么解决方案是什么?
    • @Josh 不使用静态单元格,并且总是将它们出列。
    • @leftspin 在我的例子中,我为设置配置 UI 实现了一个 ListView,所以每一行都是完全不同的。这就是我使用静态单元格的原因。
    【解决方案2】:

    我遇到了同样的问题,这似乎是一个错误。我进行了一些实验,当我将动画选项设置为UITableViewRowAnimationNone 时,问题不会发生。当您将该选项设置为 UITableViewRowAnimationTop 时,还会发生一些其他有趣的事情。

    【讨论】:

    • 仍未修复。谢谢。
    【解决方案3】:

    我通过删除动画解决了这个问题

    tableView.reloadRows(at: [yourIndexPath], with: UITableView.RowAnimation.none)
    

    希望这对任何搜索此内容的人有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      相关资源
      最近更新 更多