UITableView scrollToRowAtIndexPath:atScrollPosition:animated:严重滞后我的应用

时间:2016-07-26 03:51:39

标签: ios objective-c uitableview tableview reloaddata

我有一个tableview。它会从服务器收到一堆数据。每次tableview接收数据时我想在底部显示最新的数据。我调用了scrollToRowAtIndexPath:atScrollPosition:animated:但是它落后于我的应用程序当我滚动到tableview的底部时我在屏幕上什么都不做。 这是我的主要代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identifier = @"tableViewCell";

    DLtestCellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    NSDictionary* dict = arr[indexPath.row];
    cell.myLabel.attributedText = dict[@"content"];
    [cell.myImageview sd_setImageWithURL:dict[@"imageUrl"] placeholderImage:[UIImage imageNamed:@"transparentPlaceHolder"]];    
    return cell;
}

这里滚动到底部主代码

- (void)reloadTableView
{
    dispatch_async(dispatch_get_main_queue(), ^{

        NSIndexPath *lastRow = [NSIndexPath indexPathForRow:row inSection:0];
        [self.tableView insertRowsAtIndexPaths:@[lastRow] withRowAnimation:UITableViewRowAnimationLeft];
    });
        [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}

1 个答案:

答案 0 :(得分:0)

您应该使用scrollToRowAtIndexPath方法。

在viewWillAppear中写下代码。

[theTableView reloadData];    
NSIndexPath* ip = [NSIndexPath indexPathForRow:rowNumber inSection:sectionNumberHere];
[theTableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionTop animated:NO];

这里' rowNumber'是要滚动到的数据源中的行号。

或者您可以计算' rowNumber'如下:

int lastRowNumber = [tableView numberOfRowsInSection:0] - 1; 

并将此lastRowNumber传递给indexPathForRow。

注意:numberOfRowsInSection返回行计数,而不是最后一个行号(行数 - 1)。