tableView上拉遮盖headerView

2020-05-26  本文已影响0人  大写的空气
ezgif.com-video-to-gif.gif
总体布局

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

  //在scrollviewdidScroll协议中
    if (self.homeNormalRunView.alpha < 0.95) {
        [self bringSubviewToFront:self.tableView];
    }else{//使设备图至于顶部,点击能响应
        [self bringSubviewToFront:self.homeNormalRunView];
    }

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

- (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操作,避免滑动后继续点击被干扰

上一篇 下一篇

猜你喜欢

热点阅读