我有一个应用程序,其中有许多不同的按钮排列在计算器中,例如正方形/矩形格式。它实际上与默认的 iOS 计算器极为相似。大约有 6 行,每行 4 列按钮。
问题
我遇到的问题涉及底行的按钮(大约是 iPhone 4 屏幕的底部 10)。它们在按下时表现不正常,因为当按下时,必须按住它们(大约不到一秒钟)才能注册“按钮按下”。这与标准的短按相反。
除此底行外,没有其他按钮以这种方式运行。
此外,如果点击这些按钮的上边缘,它们会正常运行,一旦被触摸就会做出响应。这让我相信按钮本身不是问题,但我的 View 布局存在一些问题。
还应注意,此问题仅存在于物理设备上。在模拟器上,按钮表现正常。
上下文
包含这些按钮的 View 不是应用程序的 Root View Controller 。相反,它被转换成这样(这里没什么特别的):
[self presentViewController:navController animated:YES completion:nil];
self 是 Root View Controller
我遇到问题的 View Controller 包含在导航 Controller 中,并由您在上面看到的 Root View Controller 以模态方式呈现。
到目前为止我尝试了什么
打开和关闭自动布局:同样的问题
重新排列 View 的层次结构:我将有问题的按钮移到了所有其他按钮的顶部和后面 结果相同的 View :同样的问题
多台设备(iPhone 4、4s、5):同样的问题(尽管按钮在 3.5 英寸和 4 英寸模拟器上响应正常)
测试其他应用(当其他应用按下此区域的按钮时,它们表现正常)
附加信息
- Interface Builder 中为有问题的 View Controller 布置了一切
- 所有的按钮都是标准设置的系统按钮,除了文字之外完全一样。
- 屏幕的所有元素(按钮、标签等)都是“ View ”的 subview
- 按钮相互齐平,重叠不应超过一两个像素。
- 有问题的按钮尺寸为:80 宽 X 44 高。
- 有问题的按钮与屏幕底部齐平
- 除了按钮之外,还有一个 UIImage 和几个标签,但它们位于屏幕顶部,不会以任何方式与任何按钮重叠。
最佳答案
此问题的原因是 Apple 似乎在屏幕底部放置了一个 GestureRecognizer,它会延迟任何其他 View 中的触摸。 在应用程序窗口上摆弄手势识别器后,我想出了一个包含 UIButton 子类的解决方案:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
BOOL inside = [super pointInside: point withEvent: event];
if (inside && !self.isHighlighted && event.type == UIEventTypeTouches)
{
self.highlighted = YES;
}
return inside;
}
尽管 touchesBegan: 被延迟调用,但正在调用给定的方法。检查 View 是否位于屏幕底部可能适合防止此修复可能出现的任何副作用。
关于ios - UIButton 无法在 iPhone 屏幕底部正确注册触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23046539/