嵌套UITableView,悬停效果,滑动手势冲突处理,联动效果

背景:

我们在开发中常常有这样的场景:头部+悬停Bar+底部无限滑动列表视图
一开始默认态的时候,三个视图都是铺开展示,当往上滑动的时候,头部滑出屏幕,bar悬停在顶部,底部列表可以继续滑动

解决思路:

A UITableView 嵌套B UITableView

image.png

问题1:悬停问题?

解决方案
UITableview的Section Header已经实现悬停效果

问题2:滑动联动问题?

解决方案
1.实现UIGestureRecognizerDelegate,让A,B UITableView都能响应滑动
2.当用户滑动的时候,如果Header Cell没有完全滑出屏幕,这个时候我们将B UITableView的contentOffset 设置为 CGPointZero;

参考代码ListDataCell中的实现

#pragma mark - tableViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (!self.cellCanScroll) {
        scrollView.contentOffset = CGPointZero;
    }
    ...
}

3.当Header Cell完全滑出屏幕,Bar处于悬停状态时,B UITableView的contentOffset不再控制,A UITableView的contentOffset保持不变

参考代码ViewController中的代理

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat bottomCellOffset = [_contentScrollView rectForSection:1].origin.y;
    if (scrollView.contentOffset.y > bottomCellOffset) {
        scrollView.contentOffset = CGPointMake(0, bottomCellOffset);
        if (self.canScroll) {
            self.canScroll = NO;
            self.contentCell.cellCanScroll = YES;
        }
    }else{
        if (!self.canScroll) {//子视图到顶部
            scrollView.contentOffset = CGPointMake(0.f, bottomCellOffset);
        }
    }
}
/**
 实现代理方法UIGestureRecognizerDelegate
 同时识别多个手势
 */
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

收益:

这是一个最最最简单的例子,帮助大家能够最快理解滑动联动的核心解决思路。

Demo链接:https://github.com/DuffYang/PerfectTableVIew

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容