我需要在不使用reloadRows和reloadData方法的情况下快速更新tableview单元。有可能吗?
答案 0 :(得分:1)
如果您只想更新屏幕上的内容,可以使用tableview.indexPathsForVisibleRows
,而其他内容将通过cellForRow
/ willDisplayCell
那么您通常会做类似的事情
tableview.indexPathsForVisibleRows.forEach {
if let cell = tableview.cellForRow(at: $0) as? MyCell {
cell.configure()
}
}
答案 1 :(得分:0)
如果要更新单元格内容大小,则应使用 beginUpdates()和 endUpdates()更改UITableViewCell的内容大小,在这种情况下,heightForRowAtindexPath将为tableView中的每个单元格调用并更新TableviewCell的高度。对于iOS> 10,您应该选择 performBatchUpdates(_:completion:),而不是beginUpdates()和endUpdates()。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.tableView.beginUpdates()
self.tableView.endUpdates()
}
更多信息
https://appengineer.in/2018/07/11/resize-uitableviewcell-size-without-fluctuation-and-jerk/
https://developer.apple.com/documentation/uikit/uitableview/1614908-beginupdates
答案 2 :(得分:0)
尝试这段代码:
UIView.setAnimationsEnabled(false)
self.yourTableView.beginUpdates()
self.yourTableView.reloadSections(NSIndexSet(index:indexToBeReload) as IndexSet, with: UITableViewRowAnimation.none)
self.yourTableView.endUpdates()