在聊天應用程序中,我正在實施在chat table view
之上加載更多按鈕。在重新加載源數據後保持UITableView單元格位置與動態高度單元格iOS
當用戶點擊加載更多的按鈕,舊郵件(加上所有這一切都出現在屏幕上的當前消息)得到數據庫中取出(使用NSFetchedResultsController
),然後我呼籲chat table view
reloadData()
方法。
我想將tableview的滾動位置設置爲重載表之前的最上一行。
根據消息文本,所有消息單元格都是動態高度。我在故事板上使用auto layout
。
我的代碼:
let oldContentheight = _chatTableView.contentSize.height
_chatTableView.reloadData()
executeOnMain {
if self.firstTimeFetching {
self.firstTimeFetching = false
self.scrollTableToLastRow(withAnimation: false)
//this is for going to last cell when we come to chat screen
}
else {
//after pressing load more button
let newContentHeight = self._chatTableView.contentSize.height
let newOffset = CGPointMake(0, newContentHeight - oldContentheight)
self._chatTableView.setContentOffset(newOffset, animated: false)
}
}
請檢查我的代碼,添加到問題 – D4ttatraya
如果您加載的數據附加了舊數據,則應該依賴TopCell的INDEXPATH。 你應該檢查變量:var indexPathsForVisibleRows:[NSIndexPath]? {get}和方法:func scrollToRowAtIndexPath(_ indexPath:NSIndexPath, atScrollPosition scrollPosition:UITableViewScrollPosition, animated animated:Bool) –
使用var indexPathsForVisibleRows:[NSIndexPath]? {get}在重載後獲取oldIndexPath,調用方法滾動到滾動到原始索引路徑 –