如何在不使用reloadRows和reloadData swift的情况下更新uitableview单元

时间:2018-07-11 09:25:52

标签: ios swift uitableview

我需要在不使用reloadRows和reloadData方法的情况下快速更新tableview单元。有可能吗?

3 个答案:

答案 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()