导航栏中的 UIButton 无法识别 iOS 11 中的点击
Posted
技术标签:
【中文标题】导航栏中的 UIButton 无法识别 iOS 11 中的点击【英文标题】:UIButton in Navigation Bar Not Recognizing Taps in iOS 11 【发布时间】:2017-09-19 17:45:40 【问题描述】:我在位于UIImage
和UILabel
顶部的导航栏中有一个UIButton
。它在 ios 10 中运行良好,但现在在 iOS 11 中它无法识别来自我的@IBAction
插座的任何水龙头。
我尝试将水龙头出口移动到条形按钮项目,但这也不起作用。 UIButton
具有以下约束:
我通过给它一个绿色背景来确认它在那里,所以我知道它是可见且可用的。
知道发生了什么吗?
【问题讨论】:
与 UIBarButtonItem 相同的问题 :( 尝试找到解决方案... 【参考方案1】:我从其他开发人员那里找到了解决方案。
您必须向视图添加宽度和高度约束,以将您的所有内容包装在条形按钮项内。所以在我的例子中,标记为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
之后,一切都像以前一样。
【讨论】:
是的,它对我有用。为添加到条形按钮项的所有视图设置约束是解决此问题的技巧 这也适用于您在 navigationItem 的 titleView 中放置按钮的类似情况。非常不直观,但谢谢! 当您在 Xcode 中检查调试视图层次结构时 - 如果您在自定义导航项中看不到包含元素(按钮或视图)的视图,那么此修复程序应该可以解决您的问题。至少它对我有用。【参考方案2】:添加到 Clifton Labrum,这是要走的路。 Apple 改变了 iOS 11 中导航栏的工作方式。 这也可以在 Storyboard 中完成,但要通过后代约束。
UIBarButtonItem 内的自定义视图不能直接给定约束。相反,为其子视图提供约束,自定义视图将隐式获取其约束:
由于这些限制,自定义视图将隐式获取其大小。
这应该可以解决由 iOS 11 引起的所有奇怪行为。
【讨论】:
这是一个很好的选择,不需要任何代码。谢谢!【参考方案3】:这很疯狂,但是: 在我的情况下,我有带有 NavBarItems 的自定义 NavBar(在我的情况下是右按钮)和 IMPORTANT:以编程方式添加了 UITapGestureRecognizer(用于在文本字段周围点击键盘时关闭键盘):
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
view.addGestureRecognizer(tap)
在 iOS 10.3 上 - 一切正常......在 11 上 - 我只有“点击”动作......所以当我关闭 TapGestureRecognizer - NavBar 上的动作开始工作......
所以,如果您的屏幕上有一些手势 - 请尝试将其删除...
希望对你有帮助
【讨论】:
以上是关于导航栏中的 UIButton 无法识别 iOS 11 中的点击的主要内容,如果未能解决你的问题,请参考以下文章