导航栏中的 UIButton 无法识别 iOS 11 中的点击

UIButton in Navigation Bar Not Recognizing Taps in iOS 11

我在位于 UIImageUILabel 顶部的导航栏中有一个 UIButton。它在 iOS 10 中运行良好,但现在在 iOS 11 中它无法识别来自我的 @IBAction 插座的任何水龙头。

我尝试将水龙头出口移至条形按钮项目,但这也不起作用。 UIButton 具有以下约束:

我通过给它一个绿色背景来确认它在那里,所以我知道它是可见的和可用的。

知道发生了什么事吗?

这很疯狂但是: 在我的情况下,我有自定义 NavBar 和 NavBarItems(在我的例子中是右按钮)和 重要:以编程方式添加的 UITapGestureRecognizer(用于在文本字段周围点击时关闭键盘):

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
view.addGestureRecognizer(tap)

在 iOS 10.3 - 一切正常...在 11 - 我只有我的 "tap" 操作...所以当我关闭 TapGestureRecognizer - NavBar 上的操作开始工作...

所以,如果您的屏幕上有一些手势 - 只需尝试将其删除...

希望对您有所帮助

我从其他开发人员那里找到了解决方案。

您必须向视图添加宽度和高度限制,以将您的所有内容包裹在栏按钮项中。所以在我的例子中,标记为 View 的项目需要约束。

这是要做的事情:

步骤 1

View 创建一个 @IBOutlet 到具有此导航栏的视图控制器。

@IBOutlet weak var myView: UIView!

步骤 2

在包含的视图控制器中,在 viewDidLoad() 内添加约束:

myView.widthAnchor.constraint(equalToConstant: 63).isActive = true
myView.heightAnchor.constraint(equalToConstant: 33).isActive = true

之后一切如常。

添加到 Clifton Labrum,这是必经之路。 Apple 更改了导航栏在 iOS 11 中的工作方式。 这也可以在情节提要中完成,但要通过后代约束。

不能直接给 UIBarButtonItem 中的自定义视图约束。相反,为其子视图提供约束,自定义视图将隐式获得其约束:

由于这些限制,自定义视图将隐式获取其大小。

这应该可以解决由 iOS 11.

引起的所有奇怪行为