UITableView刷新而不滚动

Col*_*eel 20 objective-c uitableview ios

我有一个_TableView项目,我想设置自动刷新,我不希望它滚动刷新,让我们说用户滚动2页,并刷新trigered - >所以我想把刷新的内容放到表的顶部没有插入用户的滚动

假设用户在第18行,现在_dataSource刷新,所以它取出让我们说4个项目,所以我希望用户留在他的项目上.

实现它的最佳方法是什么?

Dav*_*eek 35

对于Swift 3+:

您需要保存当前的偏移量UITableView,然后重新加载,然后重新设置偏移量UITableView.

我为此创建了这个函数:

func reload(tableView: UITableView) {

    let contentOffset = tableView.contentOffset
    tableView.reloadData()
    tableView.layoutIfNeeded()
    tableView.setContentOffset(contentOffset, animated: false)

}
Run Code Online (Sandbox Code Playgroud)

只需拨打: reload(tableView: self.tableView)


Tru*_*han 24

SWIFT 3

let contentOffset = self.tableView.contentOffset
self.tableView.reloadData()
self.tableView.layoutIfNeeded()
self.tableView.setContentOffset(contentOffset, animated: false)
Run Code Online (Sandbox Code Playgroud)

使用UITableViewAutomatic Dimension时,这是iOS8的错误.我们需要存储表的内容偏移,重载表,强制布局和设置contenOffset.

CGPoint contentOffset = self.tableView.contentOffset;
[self.tableView reloadData];
[self.tableView layoutIfNeeded];
[self.tableView setContentOffset:contentOffset];
Run Code Online (Sandbox Code Playgroud)


Hit*_*esh 11

只需设置estimatedRowHeight为最大可能值。

 self.tableView.estimatedRowHeight = 1000
 self.tableView.estimatedSectionFooterHeight = 100.0
 self.tableView.estimatedSectionHeaderHeight = 500.0
Run Code Online (Sandbox Code Playgroud)

就是这样!!

笔记:

请不要FLT_MAX, DBL_MAX使用价值。可能会使您的应用程序崩溃。


use*_*882 10

我正在显示是否只添加了一行.您可以将其扩展为多行.

    // 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];
Run Code Online (Sandbox Code Playgroud)

但要实现这一点,您需要定义- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath方法.或者,如果它是常量,您可以直接给出tableview行高.


小智 5

使用扩展

创建UITableViewExtensions.swift并添加以下内容:

extension UITableView {

    func reloadDataWithoutScroll() {
        let offset = contentOffset
        reloadData()
        layoutIfNeeded()
        setContentOffset(offset, animated: false)
    }
}
Run Code Online (Sandbox Code Playgroud)