【问题标题】:Swift TableView Contents Disappear and Flash When Reloaded重新加载时,Swift TableView 内容消失并闪烁
【发布时间】: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


【解决方案1】:

你有没有试过每次更新 tableview 后不重新加载?

另一方面,它可能并不重要,但你为什么设置 isUserInteractionEnabled = true 这么多次。

【讨论】:

    【解决方案2】:

    在表格视图中添加/删除行之前和之后使用它:

    tableview.beginupdates() 
    
    // adding/deleting row 
    
    tableview.endupdates()
    

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多