UIButton无法正确注册iPhone屏幕底部区域的触摸

我有一个应用程序,它有许多不同的按钮,以类似计算器的正方形/矩形格式排列。它实际上非常类似于默认的iOS计算器。大约有6行,每个按钮有4列

问题

我遇到的问题涉及最下面一行的按钮(在iPhone4上大约是屏幕底部的10个)。当按下按钮时,它们的行为不正常,因为按下时,它们必须被按住(大约不到一秒钟)以记录“按钮按下”。这与标准短抽头相反

除了这一排按钮之外,没有其他按钮以这种方式工作

此外,如果这些按钮在其上边缘上被点击,则它们的行为正常,一旦被触摸,就会立即做出响应。这让我相信按钮本身不是问题所在,但我的视图布局存在一些问题

还应注意,此问题仅存在于物理设备上。在模拟器上,按钮的行为正常。

上下文

包含这些按钮的视图不是应用程序的根视图控制器。相反,它被转换为原样(这里没有什么特别之处):

[自我呈现视图控制器:导航控制器动画:是完成:无];

其中self是根视图控制器

我遇到问题的视图控制器包含在导航控制器中,并且由根视图控制器以模式显示,您可以在上面看到

到目前为止我所尝试的

  • 打开和关闭自动布局:相同的问题

  • 重新排列视图的层次结构:我将有问题的按钮移动到所有其他按钮的顶部和后面
    具有相同结果的视图:相同问题

  • 多个设备(iPhone4、4s、5):同样的问题(尽管按钮在3.5英寸和4英寸模拟器上都能正常响应)

  • 测试其他应用程序(当在其他应用程序上按下此区域的按钮时,它们的行为正常)

其他信息

  • 对于有问题的视图控制器,所有内容都在Interface Builder中列出
  • 所有按钮都是具有标准设置的系统按钮,除文本外,所有按钮都完全相同
  • 屏幕的所有元素(按钮、标签等)都是“视图”的子视图
  • 按钮彼此齐平,重叠不应超过一个或两个像素
  • 问题按钮的尺寸为:80宽X 44高
  • 有问题的按钮与屏幕底部齐平
  • 除按钮外,还有一个UIImage和几个标签,但它们位于屏幕顶部,并且不会以任何方式与任何按钮重叠

造成这个问题的原因是,苹果似乎在屏幕底部放置了一个手势识别器,以延迟任何其他视图中的触摸。
在应用程序的windows上摆弄手势识别器之后,我想出了一个包含UIButton子类的解决方案:

-(BOOL)点内:(CGPoint)点带事件:(UIEvent*)事件
{
BOOL-inside=[super-pointInside:pointwithevent:event];
if(inside&!self.ishighted&&event.type==UIEventTypeTouchs)
{
self.highlighted=是;
}
返回内部;
}

虽然touchesbreated:被调用为delayed,但正在调用给定的方法。检查视图是否位于屏幕底部可能适用于防止此修复可能出现的任何副作用

发表评论