iOS 应用程序中的按钮不响应屏幕边缘的触摸

Posted

技术标签:

【中文标题】iOS 应用程序中的按钮不响应屏幕边缘的触摸【英文标题】:Buttons in iOS app don't respond to touches around the edge of the screen 【发布时间】:2018-04-17 05:34:20 【问题描述】:

我对 ios 开发比较陌生,但我正在为一个曾经非常流行的旧游戏(Eden World Builder)开发一些开源代码

我在清理代码库和进行小改动方面取得了很大进展。但是有一个问题我似乎无法解决。游戏中的每个按钮都不会响应屏幕边缘的点击。如果按钮位于屏幕一角,则必须点击按钮底部。

我尝试将按钮从边缘移开,它们可以工作,但这并不实用。因此,出于某种原因,有些东西阻止了屏幕边缘注册按钮点击,而且它似乎与按钮目标区域本身没有任何关系。

我注意到的一件事:这款游戏目前在 App Store 上,尽管它自 2015 年以来一直没有更新。在 App Store 版本中(由我拥有的相同代码构建),问题没有不会发生。这一定与在较新版本的 Xcode 中构建它有关,对吧?

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

【问题讨论】:

以下链接对您有用。 ***.com/questions/23046539/…谢谢 确保根 UIWindow bounds.size 和 frame.size 没有相反的高度和宽度。 【参考方案1】:

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

如果按钮超出其父视图边界(或其任何更高父视图的边界),只要父视图未启用剪辑,它仍然可见。结果是您仍然会看到该按钮,但它只会在触摸父视图内的部分时做出响应。您可以使用 Debug Navigator 中的 Xcode View UI Hierarchy 直观地找到它。

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

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

【讨论】:

【参考方案2】:

尝试将此添加到 viewDidAppear

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
        
    

【讨论】:

以上是关于iOS 应用程序中的按钮不响应屏幕边缘的触摸的主要内容,如果未能解决你的问题,请参考以下文章

在视图底部边缘触摸未注册 (iOS)

iOS中事件的传递和响应者链条

Cordova iOS 不响应触摸输入

触摸事件仅在 iOS 9 的左屏幕边缘附近延迟。如何解决?

带有按钮的 iOS 子视图不响应触摸。

iOS 7 UI 转换问题:屏幕底部的触摸事件被忽略