【发布时间】:2018-03-29 19:10:32
【问题描述】:
当我们在桌子上进行刷新时会出现此错误。好吧,要刷新,我们需要在表格视图上向下滑动,它做了一个简单的工作,调用 tableView(didEndDisplaying cell:) 隐藏所有单元格,然后调用 tableView(cellForRowAt indexPath:) 更新单元格数据,并调用 tableView(willDisplay cell:) 将准备好的出队列- 将单元格返回到表格视图。但是当我们向下滑动时,表格的最后一个单元格离开屏幕,UITableViewController 在上述函数调用序列结束后调用tableView(didEndDisplaying cell:),导致单元格队列的顺序混乱。
所以在刷新操作的背后发生的顺序是:
- 我的表格视图一次只显示 3 个单元格。
用户在表格视图上向下滑动,导致最后一个单元格离开屏幕,刷新控件激活,
tableview.reloadData()由刷新控制选择器调用,它会更新所有的单元格,不管表格中是否显示。tableView(didEndDisplay cell:)在后端调用以隐藏出现的单元格。-
tableView(cellForRowAt indexPath:)执行,它会更新所有单元格的数据。 -
tableView(willDisplay cell:)将可以适应屏幕的更新单元格带回表格。就我而言,只有前 3 个单元格。 - 此时,刷新控制完成。然而
viewWillDisplay()尚未调用,由于第 2 步向下滑动,我的屏幕仅显示 2 个单元格。所以 UIView 会计算单元格的尺寸来决定显示哪个单元格。 - 此时情况变得很糟糕。
-
tableView(didEndDisplay cell:)再次被调用!在第三个单元格上,因为 2 向下滑动确实隐藏了第三个单元格。 - 9.后可重用信元队列的顺序不对,导致后面的信元数据乱七八糟。
我需要一段时间才能找出错误。但是我对 tableView 的行为的分析是否正确?刷新表格视图与表格单元格的外观相矛盾。有没有人遇到过这个问题?
【问题讨论】:
标签: ios swift uitableview