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

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

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

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

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

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

【问题讨论】:

标签: ios objective-c iphone xcode view


【解决方案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
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多