美文网首页
嵌套UITableView,悬停效果,滑动手势冲突处理,联动效果

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

作者: 韩大锤 | 来源:发表于2018-09-12 19:49 被阅读0次

    背景:

    我们在开发中常常有这样的场景:头部+悬停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

    相关文章

      网友评论

          本文标题:嵌套UITableView,悬停效果,滑动手势冲突处理,联动效果

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