我在 UIView 下方有一个 float 的 UINavigationBar header 。我已将它作为索引 0 处的 subview 插入,因此我可以根据 UITableView 的 contentOffset 对其进行动画处理。

但是,因为它超出了 UINavigationBar 的范围,所以在向其添加 UITapGestureRecognizer 后,我无法在此 View 中接收触摸事件。所有触摸事件都转到其下方的 UITableView

如果有可能在导航栏边界之外有一个 subview 并为其接收触摸事件,有什么想法吗?

我这样做是因为将它添加为 UITableView 的 subview ,我必须在滚动时根据 contentOffset 设置 Y 原点,这也使动画变得非常困难,因为 Y 原点在滚动过程中会发生变化,所以我不知道在哪里将其动画化。

它类似于 Facebook 应用中的标题,带有“状态”、“照片”和“签到”按钮。

谢谢

最佳答案

您需要创建自定义 UINavigationBar 并重新实现 pointInside:withEvent: 以扩展导航栏的可触摸区域(添加您的 View 区域):

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    CGRect extendedRect = self.frame;
    extendedRect.size.height += MENU_HEADER_HEIGHT - self.frame.origin.y;
    BOOL pointInside = NO;
    if (CGRectContainsPoint(extendedRect, point)) {
        pointInside = YES;
    }
    return pointInside;
}

10-07 18:34