美文网首页
tableView上拉遮盖headerView

tableView上拉遮盖headerView

作者: 大写的空气 | 来源:发表于2020-05-26 14:39 被阅读0次
ezgif.com-video-to-gif.gif
总体布局

uitableview + uiview(设备视图),借用tableview滚动特性实现平滑滚动
tableview使用[_tableView setContentInset:UIEdgeInsetsMake(deviceHeight, 0, 0, 0)]; //tableview内容偏移,使设备显示

  • 将设备视图显示,在滚动时设备视图置于tableview之下,因此滚动时能实现遮盖功能
  • 设备视图在未滚动时,置于tableview之上,以便视图上各按键能正常响应。
  //在scrollviewdidScroll协议中
    if (self.homeNormalRunView.alpha < 0.95) {
        [self bringSubviewToFront:self.tableView];
    }else{//使设备图至于顶部,点击能响应
        [self bringSubviewToFront:self.homeNormalRunView];
    }
  • 设置tableview属性pageenable=yes,实现翻页

当设备视图上面有按钮需要响应时,由于tableview在设备视图上层,造成无法响应按钮,上面方法能解决按钮响应问题。但是也会造成新问题,在设备视图层上滑时,不再响应翻页效果。实际需求是两者都需要兼顾。
既然有小缺陷,那我们就改,想到的方案有两个

  • 一个是在设备视图上增加滑动手势,通过手势事件来响应上滑翻页效果
  • 利用事件响应链处理,将事件传递到按钮,滑动继续借用tableview自带功能
    利用响应链处理需求在实际开发中使用比较少,因此选择了响应链机制解决问题,顺便再次熟悉下响应链。
    将原滚动时调用bringSubviewToFront删除,增加- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法。 最终修改代码如下
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    if (_homeNormalRunView.hidden  || _homeNormalRunView.alpha < 0.1 || !_homeNormalRunView.userInteractionEnabled) {  //设备层视图隐藏,不做处理
        return [super hitTest:point withEvent:event];
    }
    NSInteger count = self.homeNormalRunView.subviews.count;
    for ( int i = 0; i < count; i++)
    {
        UIView* subView = self.homeNormalRunView.subviews[i];
        if ([subView isKindOfClass:[UIButton class]]) {  //找出所有button按钮,如点击满足button响应,事件传递到button
            if (subView.hidden || subView.alpha < 0.1 || !subView.userInteractionEnabled) {
                continue;
            }
            //进行坐标转化
            CGPoint coverPoint = [self convertPoint:point toView:_homeNormalRunView];
        
            BOOL inside = CGRectContainsPoint(subView.frame, coverPoint);
            if (inside) {
                return subView;
            }
        }
        
    }
    
    return [super hitTest:point withEvent:event];
}

_homeNormalRunView为设备视图,找出视图中所有的按钮,进行按键响应。由于上滑后,无需事件传递,因此在方法顶部有return操作,避免滑动后继续点击被干扰

相关文章

网友评论

      本文标题:tableView上拉遮盖headerView

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