触摸未调用导航栏~8像素内的事件

Sam*_*Sam 9 iphone uinavigationbar uiview

我有一个应用程序,有三个按钮(实际上UIView是)水平放置导航栏下方.

这三个按钮的尺寸足够大(例如,比后退按钮大),但是当击中大致位于前三分之一时,它们不会响应触摸.

我知道直接位于导航栏下方的这个区域对于后退按钮和其他UINavigation项目来说是"保留"的,其触摸区域扩展到导航栏之外(相当大的余量),但在某些情况下还有甚至附近的一个导航项目来窃取事件,我的观点仍然没有回应.

奇怪的是,我正在调用hitTest我的UIView中的方法,而不是touchesBegan/Ended/etc.

结果是按下按钮是非常困难的,如果一个在a附近的任何地方UINavigationItem,该项目将窃取事件,即使hitTest我正在返回正确UIView的系统.

不幸的是,我是实施者,而不是设计师,因此设计变更是最后的手段.

有任何想法吗?谢谢!

And*_*scu 9

您必须继承您的UINavigationBar并在CustomNavigationBar中执行此操作:

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    if ([self pointInside:point withEvent:event]) {
        self.userInteractionEnabled = YES;
    } else {
        self.userInteractionEnabled = NO;
    }

    return [super hitTest:point withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)

有关如何子类UINavigationBar的信息,您可以在这里找到.