ios - UINavigationBar 下方的 float 标题作为 subview - 接收触摸?

标签 ios objective-c uiview uinavigationbar

我在 UINavigationBar 下方有一个 float 的 UIView 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;
}

关于ios - UINavigationBar 下方的 float 标题作为 subview - 接收触摸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26064943/

相关文章:

ios - View 的宽度发生了奇怪的变化

ios - 无法使用类型的参数列表调用 animateWithDuration

javascript - 清除 Backbone.history

ios - UITableView 插入行动画而不滚动

iphone - 如何在不越狱手机的情况下使用私有(private) API 在 iOS 上运行后台进程来同步电子邮件项目

ios - 如何在打印输出中以 5x7"打印 UIImage?

ios - 隐藏 MPRemoteCommand 向前搜索和向后搜索

objective-c - 如何在另一个 modalViewController 退出后更新 modalViewController

objective-c - 如果不存在,在 firebase 中推送一个新节点

swift - Model View Controller 中 TableView 的最佳实现