scrollview tableView嵌套解決方案示例
正文
在網上找瞭很多,沒有喜歡的方案。也參考瞭眾多設計,做瞭一款自認為比較簡潔、完美的方案:
大致思路:外層放置scrollview作為容器,容器內上部分topView,下部分tableView。當tableView滾動時,如果topView還在展示區域,就設置topView的y坐標,讓topView跟隨同步上移。
(註意:如果不設置tableView的headerView,tableView、和topView都會同時上移不是我想要的效果,所以設置tableView的headerView高度包括topView的高度,達到瞭完美的效果,具體實現看demo)
效果預覽:
NestScrollView.gif
核心代碼就是在父視圖、子試圖的滾動判斷
//父視圖滾動的回調,用於橫向滾動判斷
//父視圖滾動的回調,用於橫向滾動判斷 - (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]; } }
//子視圖滾動的回調,用於豎直方向上滾動判斷
//子視圖滾動的回調,用於豎直方向上滾動判斷 - (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
以上就是scrollview tableView嵌套解決方案示例的詳細內容,更多關於scrollview tableView嵌套的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- iOS開發TableView網絡請求及展示預加載實現示例
- iOS仿高德首頁推拉效果實例代碼
- iOS實現無感知上拉加載更多功能的思路與方法
- iOS UIScrollView和控制器返回手勢沖突解決方法
- iOS實現多控制器切換效果