动画将新行插入 UITableView 的新部分

Posted

技术标签:

【中文标题】动画将新行插入 UITableView 的新部分【英文标题】:Animating inserting a new row into a new section in a UITableView 【发布时间】:2018-06-21 16:26:33 【问题描述】:

问题很简单。

我正在尝试将新行添加到新部分中。

更新代码:

func updateTableView(sessions: [Sessions]) 
   self.foundSessions = sessions
    if self.numberOfSections(in: self.tableView) == 0 
        self.tableView.beginUpdates()
        self.tableView.insertSections([0], with: .automatic)
        self.tableView.endUpdates()
    
    for i in 0..<self.foundSessions.count 
       self.tableView.beginUpdates()
       self.tableView.insertRows(at: [IndexPath(row: i, section: 0)], with: .automatic             
       self.tableView.endUpdates()
    

UITableViewDataSource代码:

override func numberOfSections(in tableView: UITableView) -> Int 
     if foundSessions.isEmpty  return 0 
     return 1


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return foundSessions.count

还有错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试插入第 0 节,但更新后只有 0 节

显然,该部分似乎没有被插入。如果我取出insertRows,最终会出现空白部分,如顶部的tableFooterView 所示。我已经听从了here、here、here和here这些帖子的建议,并阅读了相应的Apple Documentation,显然无济于事。

那里有任何 ios 专家能够以我的方式向我展示错误吗?

编辑:更多调试信息 - updateTableView 在异步函数的回调中被调用。我将所有这些代码封装在一个 DispatchQueue.main.async 块中,试图纠正这种情况,但是没有成功。

【问题讨论】:

【参考方案1】:

尝试将所有更新放到部分中,并将其放在一个块中,开始...结束,如下所示

self.tableView.beginUpdates()
self.tableView.insertSections([0], with: .automatic)
for i in 0..<self.foundSessions.count 
    self.tableView.insertRows(at: [IndexPath(row: i, section: 0)], with: .automatic

self.tableView.endUpdates()

【讨论】:

那是我的第一次尝试:/ 应该这样写。谢谢你的回答! 我不太确定为什么会这样,但很快就会给出真正的原因。

以上是关于动画将新行插入 UITableView 的新部分的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4 - 将新行从数组插入到只有一个静态行的部分

UITableView - 通过点击现有单元格插入新行

等待 UITableView 完成插入

为 UITableView 插入带有动画的行(并更新所有其他单元格)

当我插入新行时,UITableView 正在跳跃

如何在 NSMutableArray 中插入新行?