导航栏中的UIButton无法识别iOS 11中的分接头

时间:2017-09-19 17:45:40

标签: uinavigationbar uinavigationitem ios11

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

navbar button

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

enter image description here

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

知道发生了什么事吗?

3 个答案:

答案 0 :(得分:11)

我找到了另一位开发者的解决方案。

您必须将宽度和高度约束添加到视图中,该视图将所有内容包装在条形按钮项目中。所以在我的例子中,标有View的项目需要约束。

在这里做什么:

第1步

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

@IBOutlet weak var myView: UIView!

第2步

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

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

之后,一切都像过去一样。

答案 1 :(得分:2)

添加到Clifton Labrum,这是要走的路。 Apple改变了导航栏在iOS 11中的工作方式。 这也可以在Storyboard中完成,但可以通过后代约束来完成。

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

UIButton has its constraints

UIButton Constraints

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

这应该可以解决iOS 11引起的所有奇怪行为。

答案 2 :(得分:1)

它很疯狂但是: 在我的情况下,我有自定义NavBar与NavBarItems(在我的情况下为rigth按钮)和重要:以编程方式添加UITapGestureRecognizer(用于在文本字段周围关闭键盘):

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
view.addGestureRecognizer(tap)
在iOS 10.3上的

- 一切都好......在11 - 我只有我的"点击"动作...所以当我解雇TapGestureRecognizer时 - NavBar上的动作开始工作......

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

希望对你有所帮助