ios - 重新加载时,Swift TableView 内容消失并闪烁
问题描述
我正在构建一个聊天应用程序,其中包含人们可以聊天的各种频道的表格视图。
如果有新消息(通道)进入,我会更新我的数据存储,然后重新加载表视图。在这种特殊情况下,如果用户接受频道邀请;该通道被添加到数据存储中。
每次添加新频道时,都会调用此方法:
@objc func processChannels() {
if self.airlockStore.unPinnedChannelDataObjects.isEmpty == true {
return
} else {
let pinnedSection = self.tableViewAdaptor!.sections[0] as! TableViewAdaptorSection<ChannelTableViewCell, ChannelDataObject>
let unPinnedSection = self.tableViewAdaptor!.sections[1] as! TableViewAdaptorSection<ChannelTableViewCell, ChannelDataObject>
unPinnedSection.items = airlockStore.unPinnedChannelDataObjects
pinnedSection.items = airlockStore.pinnedChannelDataObjects
}
updateTableView()
}
随后,这个被称为:
@objc func updateTableView() {
tableViewAdaptor?.tableView.isUserInteractionEnabled = true
tableViewAdaptor?.tableView.reloadData()
}
但是,我总是会闪烁/表格视图的内容会在以预期方式显示之前暂时消失。
已阅读有关加载表格视图时闪烁的几篇文章,但尚未能够解决此问题。
我正在考虑重新加载表格视图中的各个行,但问题是;无法保证将新频道添加到我的频道列表中的索引位置。
解决方案
在表格视图中添加/删除行之前和之后使用它:
tableview.beginupdates()
// adding/deleting row
tableview.endupdates()
推荐阅读
- dart - json字符串转换问题
- php - php - 设置没有默认值的函数并调用没有输入值的函数
- html - 卡片图像对齐
- java - 如何在spring中通过执行程序服务创建的线程中注入服务
- spring - 启用多个身份验证提供程序 Spring Boot 安全性
- reactjs - 当 CSS 使用 @import 时,Jest 失败
- ios - 在 react 应用程序上将 http 更改为 https 会使页面在 Safari 上的 iOS 上不断刷新
- sql - 当主键在sql中已知时,如何对特定单元格进行外键引用?
- xml - 从 xml 文件中获取属性值
- javascript - 在容器外单击时模态停止工作