在iOS 11上,导航栏标题视图上的UITapGestureRecognizer不起作用。

5
以下代码在 iOS 10 及以下版本中运行良好。我最近安装了 Xcode 9.0 beta 5 并在 iPad Air 上安装了 iOS 11 beta 7 进行测试。现在 remedyMenuTapped 方法没有被执行。
self.remedyMenuView = Bundle.main.loadNibNamed("RemedyMenu", owner: self, options: nil)![0] as? RemedyMenu
self.remedyMenuView?.isHidden = true
self.navigationItem.titleView = remedyMenuView;
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(RemedyDetailVC.remedyMenuTapped(_:)))
self.remedyMenuView?.addGestureRecognizer(tapGesture)

有可能需要设置 tapGesture.delegate = self 吗?或者为了防止手势冲突,可以使用这个委托方法扩展 ViewController: UIGestureRecognizerDelegate { func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true }},或者在自定义视图上使用 .isUserInteractionEnabled。 - Lito
如果您隐藏了一个视图,请注意手势将无法工作。请将isHidden设置为“false”并尝试一下。 - AshokPolu
@AshokKumarReddyPolu 我在viewDidLoad中这样做,然后在viewDidAppear中self.remedyMenuView?.isHidden = false,并且在xib中启用了RemedyMenu的用户交互。 - Homam
请检查您的 "self.remedyMenuView" 的框架并将 backgroundColor 应用于该视图,这样您就可以轻松找到视图框架。 - AshokPolu
1个回答

29

我曾经遇到了一个类似的问题,当我将带手势的自定义视图放置在标题视图中时,它似乎是由于Xcode 9中的一个错误或者iOS11中标题视图发生了一些变化,导致标题视图中的任何内容都具有0、0的大小。我通过重写我的自定义视图的intrinsicContentSize属性来解决这个问题,以您的情况为例,即“remedyMenuView”,如下所示:

override var intrinsicContentSize: CGSize {
        return CGSize(width: 150, height: 36)
    }

祝你好运。


4
我为此浪费了五个小时,但终于解决了我的问题。 - Tejzeratul
1
老兄!这太聪明了。为我解决了问题。 - Mike Critchley
一年后...使用Xcode 10.1,该错误仍然存在,但覆盖intrinsicContentSize确实是个好办法。 - domi852
你好来自2022年)谢谢你的回答)) 我遇到了一个问题,我的leftBarButtonItem带有自定义视图和内部按钮,但是它没有触发touchEvent。这真的很有帮助))) - nabiullinas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接