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 应用程序中的按钮不响应屏幕边缘的触摸的主要内容,如果未能解决你的问题,请参考以下文章