美文网首页iOS开发攻城狮的集散地iOS收藏ios
iOS开发中实现UIScrollView嵌套UITableVie

iOS开发中实现UIScrollView嵌套UITableVie

作者: 梁森的简书 | 来源:发表于2018-06-22 10:27 被阅读17次

    前言:

    力图用最简洁清晰的代码实现我们想要的效果。

    先看一个效果图:

    1.一个TableView.gif

    问:如何实现这个效果图想要的效果呢?
    答:简单,直接使用一个UITableView,上方是一个tableHeaderView,UITableView的类型使用UITableViewStyleGrouped,效果图中的红色视图作为tableview的section。

    再看一个效果图:

    2.两个Table.gif

    问:如何实现这个效果图想要的效果呢?
    答:...

    实现思路:

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

    核心思想:

    在最开始滑动的时候底部的两个UITableView不能进行滑动,当最底层的UIScrollView的偏移量达到一定偏移的时候即红黄两个视图的顶部和navigationBar的底部重合的时候最底层的UIScrollView不再发生偏移,此时底部的两个UITableView可以进行滑动。而当两个UITableView的偏移量变成0的时候两个UITableView不再发生偏移,而此时最底层的UIScrollView再度能发生偏移。
    看代码:

      #pragma mark - UIScrollViewDelegate  (核心代码)
      - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
          CGFloat contentOffsetY = scrollView.contentOffset.y;
          NSLog(@"scrollView的偏移量:===%f", contentOffsetY);
          CGFloat maxOffsetY = 200 - 64;  // 简单的代码,没有适配      iphoneX
          if (contentOffsetY > maxOffsetY) {
              [scrollView setContentOffset:CGPointMake(0,       maxOffsetY)]; //  设置最大偏移
              [[NSNotificationCenter defaultCenter]       postNotificationName:@"contentCanMove" object:nil]; // 告诉底部      内容视图能进行滑动了
              canMove = NO;   // 自己不能滑动了
          }
          if (canMove == NO) {
              [scrollView setContentOffset:CGPointMake(0, maxOffsetY)];
          }
      }
    
      // 核心代码
      - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
          if (canMove == NO) {
              [scrollView setContentOffset:CGPointMake(0, 0)];
          }
          CGFloat offsetY = scrollView.contentOffset.y;
          if (offsetY <= 0) {
              [[NSNotificationCenter defaultCenter] postNotificationName:@"OtherCanMove" object:nil];  // 告诉其他滚动视图能滚动了
              canMove = NO;   // 自己不能滑动了
          }
      }
    

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

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

    相关文章

      网友评论

      • 法克君:请问下,如果这种效果,tableView加入下拉加载,怎么才能实现呢?因为下拉的时候,tableView已经变成cannotScroll状态了
      • 白色天空729:冲你最后一句话,哈哈哈 谢谢啊 是我想要的效果,不过提取出来就是挺费劲的,耦合度要是能小点就好了,为什么底部的表格的View是UIScrollView.不理解。
        白色天空729:@梁森森 这样啊 ,挺好的,期待下一篇。
        梁森的简书:当时没有做什么封装,只是为了将核心原理代码暴露处理。 底部使用Scrollview是为了让多个Tableview能够左右滑动切换。

      本文标题:iOS开发中实现UIScrollView嵌套UITableVie

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