UITableView Refresh without scrolling
For Swift 3+:
You need to save the current offset of the UITableView
, then reload and then set the offset back on the UITableView
.
I have created this function for this purpose:
func reload(tableView: UITableView) { let contentOffset = tableView.contentOffset tableView.reloadData() tableView.layoutIfNeeded() tableView.setContentOffset(contentOffset, animated: false)}
Simply call it with: reload(tableView: self.tableView)
SWIFT 3
let contentOffset = self.tableView.contentOffsetself.tableView.reloadData()self.tableView.layoutIfNeeded()self.tableView.setContentOffset(contentOffset, animated: false)
This is error of iOS8 when using UITableViewAutomatic Dimension. We need store the content offset of table, reload table, force layout and set contenOffset back.
CGPoint contentOffset = self.tableView.contentOffset;[self.tableView reloadData];[self.tableView layoutIfNeeded];[self.tableView setContentOffset:contentOffset];
I am showing if only one row is being added. You can extend it to multiple rows.
// dataArray is your data Source object [dataArray insertObject:name atIndex:0]; CGPoint contentOffset = self.tableView.contentOffset; contentOffset.y += [self tableView:self.tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; [self.tableView reloadData]; [self.tableView setContentOffset:contentOffset];
But for this to work you need to have defined - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
the method. Or else, you can directly give your tableview row height if it is constant.