美文网首页
tableViewCell嵌套collectionView,ta

tableViewCell嵌套collectionView,ta

作者: DSA碼侬 | 来源:发表于2018-12-18 14:56 被阅读19次

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

如下动画所示:


默认.gif

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

如下动画所示:


记录赋值之后.gif

主要代码实现1: 记录collectionView的停止时候的contentOffsetx

#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!

相关文章

网友评论

      本文标题:tableViewCell嵌套collectionView,ta

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