iOS scrollview 嵌套 tableview
scrollview 嵌套tableview 或者 tableview 嵌套tableview 最主要的一步就是 scrollview或者tableview(底层的滑动控件)要打开允许多手势的代理
补充:scrollview 嵌套tableview的时候,可能会遇到这样的问题,tableview 滑动到底部发现没有弹性了,也就是到底后不能继续向上拉,必须tableview回滚一点才能,这个问题困扰了我好几天,最后解决办法是,scrollview 上添加一个scrollview ,添加的这个scrollview 什么都不用做,只是用来添加tableview的,相当于你把tableview 放在一个scrollview上,然后把scrollview 在放到一个scrollview上,最终联动的 滚动视图是 第一个scrollview 和tableview,而盛放tableview 的scrollview 就是个摆设,但是他却解决了问题,至于原因吗,原因还没分析出来 >>_<<!
#import "SQShopScrollView.h"
@interface SQShopScrollView ()<UIGestureRecognizerDelegate>
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
@end
这个代理最大的特点为:如果tableview 加在了scrollview 上了,在滑动tableview的时候,scrollview 也是在滑动的,那么只要控制好谁该滑动谁不滑动,就可以做很多事情了,比如说京东到家的商家页面、美团的商铺页面,等等
特别需要注意的是:
控制哪个页面是否滚动 并不是用 scrollenable来控制,而是使用contentoffset 来控制的。因为如果使用scrollenable来控制,在到达临界点的时候,页面会卡住,松开后在滑动才能继续滚动,这并不是我们想要的结果。所以最佳方案是:
当到达临界点时 设置
scrollView.contentOffset = CGPointMake(0,bottomCellOffset);
bottomCellOffset 为你要想scrollView 停止的那个临界点
在tableview的代理滑动里边 ,判断:
if (scrollView.contentOffset.y <= 0 && !self.isRefreshing) {
self.vcCanScroll = NO;
scrollView.contentOffset = CGPointZero;
[[NSNotificationCenter defaultCenter] postNotificationName:@"shop_home_leaveTop" object:nil];//到顶通知父视图改变状态
}
实际效果:
