日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

scrollview?tableView嵌套解決方案示例_IOS

作者:biyuhuaping ? 更新時(shí)間: 2022-10-27 編程語言

正文

在網(wǎng)上找了很多,沒有喜歡的方案。也參考了眾多設(shè)計(jì),做了一款自認(rèn)為比較簡潔、完美的方案:

大致思路:外層放置scrollview作為容器,容器內(nèi)上部分topView,下部分tableView。當(dāng)tableView滾動(dòng)時(shí),如果topView還在展示區(qū)域,就設(shè)置topView的y坐標(biāo),讓topView跟隨同步上移。

(注意:如果不設(shè)置tableView的headerView,tableView、和topView都會(huì)同時(shí)上移不是我想要的效果,所以設(shè)置tableView的headerView高度包括topView的高度,達(dá)到了完美的效果,具體實(shí)現(xiàn)看demo)

效果預(yù)覽:

NestScrollView.gif

核心代碼就是在父視圖、子試圖的滾動(dòng)判斷

//父視圖滾動(dòng)的回調(diào),用于橫向滾動(dòng)判斷

//父視圖滾動(dòng)的回調(diào),用于橫向滾動(dòng)判斷
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{    
    CGFloat placeholderOffset = 0;
    if (self.topView.selectedIndex == 0) {
        if (self.firstTableView.contentOffset.y > CGRectGetHeight(self.topView.frame) - kItemheight) {
            placeholderOffset = CGRectGetHeight(self.topView.frame) - kItemheight;
        }else {
            placeholderOffset = self.firstTableView.contentOffset.y;
        }
        [self.secondTableView setContentOffset:CGPointMake(0, placeholderOffset) animated:NO];
    }else {
        if (self.secondTableView.contentOffset.y > CGRectGetHeight(self.topView.frame) - kItemheight) {
            placeholderOffset = CGRectGetHeight(self.topView.frame) - kItemheight;
        }else {
            placeholderOffset = self.secondTableView.contentOffset.y;
        }
        [self.firstTableView setContentOffset:CGPointMake(0, placeholderOffset) animated:NO];
    }
}

//子視圖滾動(dòng)的回調(diào),用于豎直方向上滾動(dòng)判斷

//子視圖滾動(dòng)的回調(diào),用于豎直方向上滾動(dòng)判斷
- (void)updateTopViewFrame:(UIScrollView *)scrollView{
    CGFloat placeHolderHeight = CGRectGetHeight(self.topView.frame) - self.topView.itemHeight;
    CGFloat offsetY = scrollView.contentOffset.y;
    CGFloat y = 0.0;
    if (offsetY >= 0 && (offsetY <= placeHolderHeight)) {
        y = -offsetY;
    } else if (offsetY > placeHolderHeight) {
        y = -placeHolderHeight;
    } else if (offsetY < 0) {
        y = -offsetY;
    }
    [self.topView mas_updateConstraints:^(MASConstraintMaker *make) {
        make.top.offset(y + kNavBarHeight);
    }];
}

githut demo下載地址:https://github.com/biyuhuaping/NestScrollView

原文鏈接:https://www.jianshu.com/p/10184963a187

欄目分類
最近更新