【问题标题】:UIBarButtonItem not clickable on iOS 11 beta 7?UIBarButtonItem 在 iOS 11 beta 7 上不可点击?
【发布时间】:2017-08-24 06:13:44
【问题描述】:

关于这个还有另一个关于 SO 的问题,但这与它无关,因为我认为这与 iOS 11 的 beta 版本有关。

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

每个按钮在单击时都会显示一个由情节提要触发的弹出框。

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

现在我决定在运行 iOS 11 beta 7 的 iPad Pro 9.7" 上进行测试。我使用的是 Xcode 9 beta 6。当我在 iPad Pro 上运行它时,导航栏上的所有按钮都已失效。他们不响应点击。现在我尝试使用相同的 Xcode 9 beta 6 并在装有 iOS 9 的 iPad 3 上运行该应用程序,并且再次运行良好。

我正在为 iOS 9.1 编译。

按钮甚至不会像在 iOS 9 上那样突出显示以确认点击。

iOS 11 beta 7 和栏按钮项目是否存在问题?

有什么想法吗?

【问题讨论】:

  • 我遇到了类似的问题,发现如果我滑动按钮它会发送动作,这是非常奇怪的行为。
  • 看我的回答。我发现了问题

标签: uibutton uibarbuttonitem ios11 xcode9beta6


【解决方案1】:

我发现使用 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

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

【讨论】:

  • 非常好!谢谢!这是苹果永远不会修复的错误之一。这是我留给未来人们的一条消息,它将处理这个错误。 ?
  • @SpaceDog 我更新了消息,解决方案仍然有效,错误仍然存​​在
  • 这是正确的答案,为什么它没有被回答为正确的。 @太空狗
  • @ThihaAung - 因为接受的解决方案是唯一可以解决我的情况的解决方案。
【解决方案2】:

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

这是演习。我这样做是在左侧导航项中添加两个按钮:

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

这是为 iOS 9 编译的,适用于 iOS 10 及更低版本但不适用于 iOS 11 的设备。

这样做的“正确”方式是这样的

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

您会看到 iOS 允许这种情况发生,并将管理“导航项”下的两个按钮。

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

【讨论】:

  • 这并不能解决问题,因为有人可能有一个自定义视图而不是里面的一些按钮。所以“正确”(至少有效)的解决方案是为UIBarButtonItem 内的视图设置一个约束(宽度和高度)。这可以在 viewDidLoad 中手动完成。请参阅 andreylanadelrey 的回答。
【解决方案3】:

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

[self.barBTNItem setWidth:44];

【讨论】:

  • 这是有道理的。谢谢。
【解决方案4】:

点击:

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

【讨论】:

  • 没有解决我的问题。
  • 它也不能解决我的问题。
【解决方案5】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多