美文网首页收藏ios
iOS scrollToItemAtIndexPath跳转不到指

iOS scrollToItemAtIndexPath跳转不到指

作者: 某非著名程序员 | 来源:发表于2019-08-27 13:07 被阅读0次

背景:列表有时需要跳转到指定的位置。

问题: collectionView中reloadData与scrollToItemAtIndexPath同时使用时,会导致跳转失败。

分析: reloadData是异步调用的,也就是说collectionView还没刷新完成,scrollToItemAtIndexPath跳转会有问题的。

解决方案:

  1. 在刷新之后强制绘制collectionView,在跳转位置。
[self.collectionView reloadData];
[self.collectionView layoutIfNeeded];
[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:_checkedRow inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:NO];

2.同样异步向主队列中提交一个任务。

[self.collectionView reloadData];
dispatch_async(dispatch_get_main_queue(), ^{
     _checkedRow = dataArray.count-1;
      [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:_checkedRow inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:NO];
});

如果是tableView,可以用beginUpdates和endUpdates包裹。

[self.tableView beginUpdates];
[self.tableView reloadData];
[self.tableView endUpdates];

总结:
推荐使用第二种办法,即使开启跳转的动画,也能正常跳转。
有任何问题欢迎留言交流。

参考文章:详解ios监听reloadData刷新列表完毕的时机

相关文章

网友评论

    本文标题:iOS scrollToItemAtIndexPath跳转不到指

    本文链接:https://www.haomeiwen.com/subject/gifjectx.html