【问题标题】:UI table view dequeue reusable cell in wrong order when refreshUI表格视图在刷新时以错误的顺序出列可重用单元格
【发布时间】:2018-03-29 19:10:32
【问题描述】:

当我们在桌子上进行刷新时会出现此错误。好吧,要刷新,我们需要在表格视图上向下滑动,它做了一个简单的工作,调用 tableView(didEndDisplaying cell:) 隐藏所有单元格,然后调用 tableView(cellForRowAt indexPath:) 更新单元格数据,并调用 tableView(willDisplay cell:) 将准备好的出队列- 将单元格返回到表格视图。但是当我们向下滑动时,表格的最后一个单元格离开屏幕,UITableViewController 在上述函数调用序列结束后调用tableView(didEndDisplaying cell:),导致单元格队列的顺序混乱。

所以在刷新操作的背后发生的顺序是:

  1. 我的表格视图一次只显示 3 个单元格。
  2. 用户在表格视图上向下滑动,导致最后一个单元格离开屏幕,刷新控件激活,

  3. tableview.reloadData()由刷新控制选择器调用,它会更新所有的单元格,不管表格中是否显示。

  4. tableView(didEndDisplay cell:) 在后端调用以隐藏出现的单元格。

  5. tableView(cellForRowAt indexPath:) 执行,它会更新所有单元格的数据。
  6. tableView(willDisplay cell:) 将可以适应屏幕的更新单元格带回表格。就我而言,只有前 3 个单元格。
  7. 此时,刷新控制完成。然而viewWillDisplay() 尚未调用,由于第 2 步向下滑动,我的屏幕仅显示 2 个单元格。所以 UIView 会计算单元格的尺寸来决定显示哪个单元格。
  8. 此时情况变得很糟糕。
  9. tableView(didEndDisplay cell:) 再次被调用!在第三个单元格上,因为 2 向下滑动确实隐藏了第三个单元格。
  10. 9.后可重用信元队列的顺序不对,导致后面的信元数据乱七八糟。

我需要一段时间才能找出错误。但是我对 tableView 的行为的分析是否正确?刷新表格视图与表格单元格的外观相矛盾。有没有人遇到过这个问题?

【问题讨论】:

    标签: ios swift uitableview


    【解决方案1】:

    您可以按照本教程实现刷新控制以刷新表格视图中的数据: https://medium.com/anantha-krishnan-k-g/pull-to-refresh-how-to-implement-f915743703f8

    【讨论】:

    • 在我看来,这个教程有点老了,因为 iOS 10 在 UITableViewController 中内置了 refreshControl。
    • 从本教程中,您可以按照相同的步骤进行操作。因为 refreshControl 默认为零。您需要为此属性分配一个刷新控件以实现其行为。 [developer.apple.com/documentation/uikit/uitableviewcontroller/…
    • 是的,我只是为 refreshControl 声明了一个惰性变量,但仍然出现错误。
    猜你喜欢
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    相关资源
    最近更新 更多