我每隔几分钟刷新一次UITable,以防有新数据,应该在表格的开头添加,而不是重新加载。
var j = 0
let n = store?.news?.count
while(j < n!){
self.news?.insert((store?.news?[j])!, at: j)
j = j + 1
}
在第一个位置保存数据没问题。 问题是我不能保持单元格位置在每次重新加载后向上移动(添加的记录数),我尝试了多个功能,但显然它只适用于表格末尾添加的数据。 / p>
let contentOffset = self.tableV.contentOffset
self.tableV.reloadData()
self.tableV.contentOffset = contentOffset
此外,我厌倦了保存单元格位置并添加输入数据的计数,但这种添加不起作用。 有没有办法添加计算的输入数据的数量,让N对indexPath.row?
答案 0 :(得分:6)
实际上它发生是因为它重新计算了UITableViewAutomaticDimension height
。
您可以通过存储cell's height
来解决此问题,并使用它来为您的单元格estimatedHeightForRowAt
分配。
在场景后面,它会将您的确切cell's height
分配给estimatedHeightForRowAt
。所以重新计算不会波动你的tableview。
实施如下。
// declare dictionary variable for storing heights of cells
var cellHeightsDictionary: [IndexPath: CGFloat] = [:]
然后 使用tableview的方法willDisplay
在您的字典变量中存储单元格的高度 ,并分别在estimatedHeightForRowAt
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
self.cellHeightsDictionary[indexPath] = cell.frame.size.height
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
if let height = self.cellHeightsDictionary[indexPath]{
return height
}
return UITableViewAutomaticDimension
}
就是这样。你完成了。
答案 1 :(得分:0)
为了更好的方法,我认为您可以轻松地在tableview
中添加新行,无需重新加载tableview
。所以删除self.tableV.reloadData()
var j = 0
var arrayIndexPaths : [NSIndexPath] = []
let n = store?.news?.count
while(j < n!){
self.news?.insert((store?.news?[j])!, at: j)
let indexPath = NSIndexPath(forRow: j, inSection: 0)
j = j + 1
arrayIndexPaths.append(indexPath)
}
// Now you have array of IndexPaths so you just insert New row like this way.
self.tableview.beginUpdates()
self.tableview.insertRowsAtIndexPaths(arrayIndexPaths, withRowAnimation: .None)
self.tableview.endUpdates()
更新答案
这样的UITableViewDelegate
方法
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.news?.count
}
答案 2 :(得分:0)
我找到了解决问题的方法。由于我在所有表中都有一个单元格大小,我尝试了这种方法:
self.cell = 143 * CGFloat(n!)
let offset = self.tableV.contentOffset.y + self.cell!
self.tableV.reloadData()
self.tableV.contentOffset.y = offset
我将输入的单元格数(n)添加到contentOffset中,表格在重新加载数据后保持其位置。