【发布时间】:2021-11-09 05:39:20
【问题描述】:
我正在构建一个聊天应用程序,其中包含人们可以聊天的各种频道的表格视图。
如果有新消息(频道)进入,我会更新我的数据存储,然后重新加载表格视图。在这种特殊情况下,如果用户接受频道邀请;该通道被添加到数据存储中。
每次添加新频道时,都会调用此方法:
@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;只需添加一行或部分。仅当表格发生重大更改时才应使用重新加载整个表格视图。特别是如果它具有具有可变高度行的复杂布局
-
在tableview中添加/删除行前后使用这个:tableview.beginupdates()添加/删除行tableview.endupdates()
标签: ios swift uitableview reloaddata