美文网首页
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