iOS开发中实现UIScrollView嵌套UITableView,且有悬停效果

0.ScrollView嵌套tableView.png

(感觉https://www.jianshu.com/p/a540b7390c14这片文章的效果更好)

看效果图:

2.两个Table.gif

实现思路:

最底层使用一个UIScrollView,上方蓝色视图使用一个简单的UIView,下方使用一个UIScrollView,该ScrollView上方放两个UITableView和两个简单View(红色和黄色的视图)

核心思想:

在最开始滑动的时候底部的两个蓝色TableView不能进行滑动,当最底层的绿色ScrollView的偏移量达到一定偏移的时候(偏移量为上方蓝色视图的高度)不再发生偏移,此时底部的两个蓝色TableView可以进行滑动。而当两个蓝色TableView的偏移量变成0的时候不再发生偏移,而此时最底层的绿色ScrollView再度能发生偏移。

看代码:
最底层绿色ScrollView

  - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat contentOffsetY = scrollView.contentOffset.y;
CGFloat maxOffsetY = MAXOFFSETY;
if (contentOffsetY >= maxOffsetY) {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"contentCanMove" object:nil]; // 告诉底部内容视图能进行滑动了
    canMove = NO;   // 自己不能滑动了
}
if (canMove == NO) {
    [scrollView setContentOffset:CGPointMake(0, maxOffsetY)];
}
}

第二层的黄色ScrollView

  - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (canMove == YES) {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"OtherCanNotMove" object:nil];  // 告诉其他滚动视图不能滚动了
}else{
    [scrollView setContentOffset:CGPointMake(0, 0)];
}
CGFloat offsetY = scrollView.contentOffset.y;
if (offsetY <= 0) {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"OtherCanMove" object:nil];  // 告诉其他滚动视图能滚动了
    canMove = NO;   // 自己不能滑动了
}
}

注意:为了让ScrollView上的多个手势能一起触发,我们要重写最底层绿色ScrollView的方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
//返回YES,则可以多个手势一起触发方法,返回NO则为互斥(比如外层UIScrollView名为mainScroll内嵌的UIScrollView名为subScroll,当我们拖动subScroll时,mainScroll是不会响应手势的(多个手势默认是互斥的),当下面这个代理返回YES时,subScroll和mainScroll就能同时响应手势,同时滚动,这符合我们这里的需求)
    return YES;
}

demo地址:https://gitee.com/liangsenliangsen/uiscrollview_nesting.git
再看下别人写的效果更好的效果图和demo:
效果图:

展示图.gif

demo地址:
https://gitee.com/liangsenliangsen/uiscroll_hovering.git
本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。😊

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

推荐阅读更多精彩内容