我在导航栏中有一个UIButton,它位于UIImage和UILabel的顶部。它在iOS 10中工作得很好,但是现在在iOS 11中它不识别来自我的@IBAction插座的任何水龙头。

我试着把水龙头出口移到酒吧按钮上,但那也不起作用。UIButton具有以下约束:

我通过给它一个绿色的背景来确认它在那里,所以我知道它是可见的和可用的。
知道怎么回事吗?
发布于 2017-09-20 15:07:12
我从另一个开发人员那里找到了一个解决方案。
您必须向视图中添加宽度和高度约束,该视图将所有内容包装在条形按钮项目中。因此,在我的例子中,标记为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在那之后,一切都像过去一样运转。
发布于 2018-02-22 13:12:26
加上克利夫顿·拉布姆,这就是我们要走的路。苹果改变了iOS 11中导航条的工作方式。这也可以在Storyboard中实现,但可以通过后代约束来实现。
UIBarButtonItem内部的自定义视图不能直接被赋予约束。相反,为其子视图提供约束,而自定义视图将隐式地获得其约束:


由于这些约束,自定义视图将隐式地获得其大小。
这将修复由iOS 11引起的所有奇怪行为。
发布于 2017-09-20 08:44:25
这很疯狂,但是:在我的情况下,我使用了自定义的NavBar和NavBarItems (在我的例子中是严谨的按钮)和重要的:以编程方式添加了UITapGestureRecognizer(用于关闭文本字段周围的键盘):
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
view.addGestureRecognizer(tap)在iOS 10.3上-一切都好.在11 -我只有我的“踢踏舞”行动..。所以当我对TapGestureRecognizer不屑一顾NavBar上的行动开始起作用了.
所以,如果你在屏幕上有一些手势-试着移除它.
希望这对你有帮助
https://stackoverflow.com/questions/46306796
复制相似问题