除了第一个单元格外,重新加载表视图中所有行的最有效方法是什么?

时间:2019-07-03 15:30:56

标签: ios swift uitableview reloaddata indexpath

我在tableview中有项目,并且我想重新加载或更新tableview数据,但表视图的第一行或第一索引路径除外。

 let visibleIndex = self.tableView.visibleCells.compactMap {  
 tableView.indexPath(for: $0)  }
  self.tableView.reloadRows(at: visibleIndex, with: .automatic)

但是这会重新加载所有可见单元格,我如何重新加载除第一行以外的所有可见单元格

2 个答案:

答案 0 :(得分:2)

假设第一个可见的单元格是最顶部的单元格

 self.tableView.reloadRows(at: Array(visibleIndex.dropFirst()), with: .automatic)

如果不是

let visibleIndex = self.tableView.visibleCells.compactMap {
    tableView.indexPath(for: $0)  }.filter { $0.row != 0 } 
self.tableView.reloadRows(at: visibleIndex, with: .automatic)

==

let visibleIndex:[IndexPath] = self.tableView.visibleCells.compactMap { item in
    let index = self.tableView.indexPath(for:item)!
    return index.row != 0 ? index : nil
}

答案 1 :(得分:2)

无需获取可见的单元格。使用indexPathsForVisibleRows并删除第0节第0行的索引路径。

let allButFirst = (self.tableView.indexPathsForVisibleRows ?? []).filter { $0.section != 0 || $0.row != 0 }
self.tableView.reloadRows(at: allButFirst, with: .automatic)