UIBarButtonItem 在 iOS 11 beta 7 上不可点击?

UIBarButtonItem not clickable on iOS 11 beta 7?

SO 上还有一个关于此的问题,但这与它无关,因为我认为这与 iOS 11.

的测试版有关

我有这 2 个 UIButton 分组在一个 UIView 中。这个 UIView 被放在一个 UIBarButtonItem 中,整个东西被设置为 Left Bar Button Items,使用 Interface Builder。

单击每个按钮时,会显示一个由故事板触发的弹出窗口。

我正在 iPad 3,运行ning iOS 9,使用 Xcode 8 进行测试。效果非常好。

现在我决定在我的 iPad Pro 9.7" 上进行测试,即 运行ning iOS 11 beta 7。我正在使用 Xcode 9 beta 6 . 当我在 iPad Pro 上 运行 这个时,导航栏上的所有按钮都死了。他们不响应点击。现在我尝试相同的 Xcode 9 beta 6 和 运行 iPad 3 和 iOS 9 上的应用程序,一切都非常好。

我正在为 iOS 9.1.

编译

按钮甚至不会像在 iOS 9.

上那样突出显示以确认点击

iOS 11 beta 7 和栏按钮项目有问题吗?

有什么想法吗?

我发现问题了!惊人的错误!

这是演习。我通过这样做向左侧导航项添加了两个按钮:

  1. 创建视图
  2. 在该视图中添加两个 UIButtons
  3. 将该视图添加到左侧导航项。

这是为 iOS 9 编译的,适用于 iOS 10 及以下但不适用于 iOS 11 的设备。

"correct" 方法是这样

  1. UIButton 拖到左侧导航项。
  2. 将另一个 UIButton 拖到左侧导航项。

您会看到 iOS 允许这种情况发生并将管理 "navigation items" 下的两个按钮。

这适用于我从 9 到 11 测试过的所有 iOS 版本。

我发现使用 XCode 8 构建的相同代码在 ios10-11 上运行良好,但是当我使用 XCode 9 构建带有自定义视图的 UIBarButtonItem 时没有响应点击次数。

看起来问题出现是因为从 ios 11 开始,导航栏使用自动布局而不是处理框架。屏幕上的按钮看起来不错,但从技术上讲它们似乎在屏幕外。

所以我的解决方法是向我的自定义视图添加自动布局约束。

//my custom view init
let view = MyCustomView()
view.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
let rightButtonItem = UIBarButtonItem(customView: view)

//constraints
let widthConstraint = view.widthAnchor.constraint(equalToConstant: 44)
let heightConstraint = view.heightAnchor.constraint(equalToConstant: 44)

heightConstraint.isActive = true
widthConstraint.isActive = true

//add my view to nav bar 
self.rightBarButtonItem = rightButtonItem

自定义右栏按钮成功接收点击后。

点击:

UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(manualAdd.dismissKeyboard))  
tap.cancelsTouchesInView = false  // this line is required for xcode 9  
view.addGestureRecognizer(tap)  

我在升级到 iOS 11 时遇到了同样的问题。

包含按钮的 UIView 的大小为 0x0。

我在 Interface Builder 上修复了 UIView 的高度 x 宽度,之后它就可以工作了。

我通过将此方法添加到 UIBarButtonItem 来实现此功能:

[self.barBTNItem setWidth:44];