背景:
我们在开发中常常有这样的场景:头部+悬停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;
}
收益:
这是一个最最最简单的例子,帮助大家能够最快理解滑动联动的核心解决思路。
网友评论