防止在 UITableView 中刷新单行

Posted

技术标签:

【中文标题】防止在 UITableView 中刷新单行【英文标题】:Prevent Single Row from Refreshing in UITableView 【发布时间】:2020-05-18 22:09:40 【问题描述】:

我的 UITableView 中有一个自定义部分标题,其中包含一些头像图像的 UICollectionView。数据来源一次并为图像缓存(图像变化如此之少以至于它不保证实时更新)。

我希望做到这一点,即使调用 UITableView 刷新,此标头也不会再次重绘。这样做的原因是每次你采取行动时,它都会导致图像闪烁,因为它们正在从默认的匿名剪影重新绘制为人的实际图像。图片被缓存了,不过没关系,因为

我认为这在设计上是不可能的 - UITableView 会在每次调用刷新时破坏所有内容并重新加载,对吗?

我只是希望我可以挂接刷新并保留部分标题,并仅重新加载行。

感谢您的任何想法/指导,我知道这有点不常见,但我不想将标题移到它自己的视图中,因为我直接使用 UITableViewController,这将是一个真正的痛苦将其嵌入到容器视图中。

【问题讨论】:

您可以尝试将节标题放入自己的节中,当您重新加载表格时,只重新加载其他节。另一种选择是在某处为“firstLoad”存储一个变量,并根据它是否为 firstLoad 以不同的方式配置节标题。 【参考方案1】:

是的,即使您缓存了图像并通过本地或其他方式设置,加载也需要时间。如果您使用延迟加载,它将是飞溅(肯定:))。所以,唯一可能的事情是,你必须在刷新后更新你的 tableView 使用tableView.beginUpdatestableView.endUpdates。根据刷新后的数据输入一些添加单元格或删除单元格

【讨论】:

嗯,这很有趣——你能在 beginUpdates 和 endUpdates 部分详细说明吗?我从来没有使用过它 tableView.beginUpdates() tableView.deleteRows(at: [IndexPath(row: 0, section: 0), with: .automatic) tableView.insertRows(at: [IndexPath(row: 1, section: 0), with: .automatic) tableView.endUpdates() 是这样的。确保您的数据源项与 tableView 的行相同。否则会崩溃 我在哪里将此代码添加到表格重绘事件中? 用它替换reloadData

以上是关于防止在 UITableView 中刷新单行的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 的 shouldIndentWhileEditingRowAtIndexPath: 没有被调用

UITableView 重复单元格如何防止呢?迅速

如何在 UITableView 中创建单行视图分隔符

UITableView 拉伸问题

实现 UITapGestureRecognizer 后 UITableView 不再响应

在 tableviewcell 中使用 UITableview 执行 segue