收藏ios

iOS scrollToItemAtIndexPath跳转不到指

2019-08-27  本文已影响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刷新列表完毕的时机

上一篇 下一篇

猜你喜欢

热点阅读