1

我在 a 中有项目tableview,我想重新加载或更新tableview数据,但 tableview 的第一行或第一个 indexpath 除外。

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

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

4

2 回答 2

6

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

let allButFirst = (self.tableView.indexPathsForVisibleRows ?? []).filter { $0.section != 0 || $0.row != 0 }
self.tableView.reloadRows(at: allButFirst, with: .automatic)
于 2019-07-03T15:43:31.790 回答
3

假设第一个可见单元格是最上面的 1 你可以做

 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
}
于 2019-07-03T15:36:26.357 回答