iOS应用程序中的按钮不';不要对屏幕边缘的触摸做出反应

iOS应用程序中的按钮不';不要对屏幕边缘的触摸做出反应,ios,objective-c,iphone,xcode,view,Ios,Objective C,Iphone,Xcode,View,我对iOS开发还比较陌生,但我正在尝试为一款曾经非常流行的老游戏开发一些开源代码(Eden World Builder) 我在清理代码库方面取得了很大的进步,做了一些小的改动。但有一个问题我似乎无法解决。游戏中的每个按钮都不会对屏幕边缘的点击做出反应。如果一个按钮在屏幕的一角,你必须点击按钮的底部 我试着将按钮从边缘移开,它们可以工作,但这不实用。因此,由于某种原因,屏幕边缘无法记录按钮点击,这似乎与按钮目标区域本身无关 我注意到一件事:这款游戏目前在应用商店中,尽管自2015年以来一直没有更新

我对iOS开发还比较陌生,但我正在尝试为一款曾经非常流行的老游戏开发一些开源代码(Eden World Builder)

我在清理代码库方面取得了很大的进步,做了一些小的改动。但有一个问题我似乎无法解决。游戏中的每个按钮都不会对屏幕边缘的点击做出反应。如果一个按钮在屏幕的一角,你必须点击按钮的底部

我试着将按钮从边缘移开,它们可以工作,但这不实用。因此,由于某种原因,屏幕边缘无法记录按钮点击,这似乎与按钮目标区域本身无关

我注意到一件事:这款游戏目前在应用商店中,尽管自2015年以来一直没有更新过。在App Store版本中(使用与我相同的代码构建)不会出现问题。这一定与在更新版本的Xcode中构建它有关,对吗


任何帮助都会很有帮助,这让我沮丧了好几个星期。谢谢

第一个问题的答案很可能是您的按钮在其父视图之外,或者手势识别器正在干扰

如果按钮超出其父视图边界(或其更高父视图的任何边界),则只要父视图未启用剪裁,它仍将可见。结果是,您仍将看到该按钮,但它仅在触摸父视图中的零件时才会响应。您可以使用调试导航器中的Xcode
查看UI层次结构
直观地找到这一点

如果是手势识别器干扰了您的按钮,那么有几种解决方案可能有效。您在评论中从@Anbu获得的链接中描述了几个


第二个问题的答案是,旧应用程序与旧框架相链接。即使它们运行在最新的iOS版本上,它们仍然会引入较旧版本的框架,从而使它们(大部分)像以前一样继续工作。这样做是为了保持与旧代码的兼容性。

尝试将其添加到ViewDidDisplay

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    if let window = view.window,
        let recognizers = window.gestureRecognizers {
        recognizers.forEach { r in
            r.delaysTouchesBegan = false
            r.cancelsTouchesInView = false
            r.isEnabled = false
        }
    }
}

下面的链接对你有用。感谢确保root UIWindow bounds.size和frame.size的高度和宽度不相反。