UITableViewCell
嵌套 UICollectionView
时候,会有这样的一个bug
: 首页滚动collectionView
,然后滚动tableView
,发现,循环利用的tableViewCell
的contentOffset
不为0
,是重复利用的那一个collectionView的contentOffset
(tableview
循环利用的原因,如果选择不循环利用bug
是解决了,但是太卡顿,不可取)
如下动画所示:

解决办法:
把每次collectionView
滚动之后停止时候的contentOffsetX
记录下来,记录到模型数据中,当下次赋模型值的时候,collectionView
滚动到相应的contentOffsetX
位置上即可。
如下动画所示:

主要代码实现1: 记录collectionView
的停止时候的contentOffset
的x
值
#pragma mark - UIScrollDelegate
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
// 减速停止类型
BOOL scrollToScrollStop = !scrollView.tracking && !scrollView.dragging &&!scrollView.decelerating;
if (scrollToScrollStop) {
[self scrollViewDidEndScroll];
}
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (!decelerate) {
// 手动拖拽停止类型
BOOL dragToDragStop = scrollView.tracking && !scrollView.dragging && !scrollView.decelerating;
if (dragToDragStop) {
[self scrollViewDidEndScroll];
}
}
}
#pragma mark - scrollView 停止滚动监测公共方法
- (void)scrollViewDidEndScroll {
// 停止时候模型记录值
self.model.pointX = self.collectionView.contentOffset.x;
}
2.赋数据模型时候,设置contentOffSetX
值
- (void)setModel:(dataModel *)model{
_model = model;
[self.collectionView setContentOffset:CGPointMake(model.pointX, 0)];
}
ok~ over!
网友评论