在使用MJRefresh情况下,tableVeiw跳转到顶部mj_header偏移的问题及处理办法

要想实现在reload之后弹出alertView,或者滚动到特定一行, 也许你会这么写

[_tableView reloadData];
[_tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated];

看似没问题,但是滚动没起作用,因为reloadData是立即返回的,不会等tableview刷新完成
解决办法就是要等排队,等tableview的刷新操作完成,再去做滚动等其他操作。
方法1:

  - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;

这个方法官方的解释有:
Specifying a delay of 0 does not necessarily cause the selector to be performed immediately. The selector is still queued on the thread’s run loop and performed as soon as possible.

正好符合咱们的要求。

- (void)reload{ 
    [_tableView reloadData];
    [self performSelector:@selector(scrollToIndexPath:) withObject:[NSIndexPath indexPathForRow:rowIndex inSection:sectionIndex] afterDelay:0.0];
}
- (void)scrollToIndexPath:(NSIndexPath *)path{
   [_tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

方法2:

  [_tableView reloadData];
  dispatch_async(dispatch_get_main_queue(), ^{
   [_tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:rowIndex inSection:sectionIndex] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
});

你可能感兴趣的:(在使用MJRefresh情况下,tableVeiw跳转到顶部mj_header偏移的问题及处理办法)