IOS中当UITableView的SectionHead为透明时如何隐藏Section背后重叠的Cell

关于这个话题我想解决的问题以及会达到什么效果,看图说话。

问题
结果
  • 在介绍思路之前必须了解「mask」这个属性,了解了mask,做起来就相当简单了!

Mask 英文解释是蒙板/面罩,平时我们称为蒙层. 在苹果官方文档里如下图,意思是Mask是一个可选的Layer,它可以是根据透明度来掩盖Layer的内容.

mask Property

Layer的透明度决定了Layer内容是否可以显示,非透明的内容和背景可以显示,透明的则无法显示.

  • 思路

<small>我们只需要将cell.layer.mask的frame设置为cell在期望的可视范围存在的多少就可以了。

什么是期望的可视范围?一张图说明。
</small>

期望的可视范围
  • 代码

    // 剪除在透明背景下的cell,即只设置可视范围的cell.layer.mask的frame
    - (void)clipOutSideCellWhenUnderTransparencySectionSetMaskFrame:(CGRect)frame {
          CALayer *maskLayer = [CALayer layer];
          maskLayer.backgroundColor = [UIColor whiteColor].CGColor;
          maskLayer.frame = frame;
          self.layer.mask = maskLayer;
      }
    
    // 使用  
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
        [_tableView.visibleCells enumerateObjectsUsingBlock:^(__kindof UITableViewCell * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
      
            // cell和section覆盖的高度 = 需要剪去的高度 20是contentInset, 100是sectionHeight,再减去cell的y
            CGFloat hideCellHeight = scrollView.contentOffset.y + 20 + 100 - obj.frame.origin.y;
      
            CGRect maksFrame = obj.bounds;
      
            if (hideCellHeight > 0 && hideCellHeight <= obj.frame.size.height) {
                maksFrame =  CGRectMake(0, hideCellHeight, obj.frame.size.width, obj.frame.size.height - hideCellHeight);
              } else if (hideCellHeight > obj.frame.size.height) {
                maksFrame = CGRectZero;
             }
            [obj clipOutSideCellWhenUnderTransparencySectionSetMaskFrame:maksFrame];   
         }];
     }
    

附件
<small>

参考资料
<small>

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

推荐阅读更多精彩内容

  • 1、禁止手机睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa阅读 1,148评论 1 6
  • 转载://www.greatytc.com/p/32fcadd12108 每个UIView有一个伙伴称为l...
    F麦子阅读 6,322评论 0 13
  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666阅读 1,454评论 0 6
  • 一、CAShapelayer 我们知道可以不使用图片情况下利用CGpath去构建任意形状的阴影。其实我们也可...
    小猫仔阅读 1,524评论 0 5
  • Git 实例化仓库 git init 查看当前状态 git stauts 提交加备注信息 git commit-m...
    Samboo阅读 200评论 0 0