iOS 11 inputAccessoryView 损坏

iOS 11 inputAccessoryView broken

我在视图控制器上为我的 UIToolBar/附件视图设置了以下设置

@IBOutlet var inputFieldView: UIToolbar!
override var canBecomeFirstResponder: Bool{
    return true
}

override var inputAccessoryView: UIView?{
    return self.inputFieldView
}

然后在我的 viewDidLoad 中我有:

    let seperator = UIView(frame: CGRect(x:0 , y: 0, width: ScreenSize.width(), height: 1))
    seperator.backgroundColor = UIColor.lightBackground
    self.inputFieldView.addSubview(seperator)
    self.inputFieldView.isTranslucent = false
    self.inputFieldView.setShadowImage(UIImage(), forToolbarPosition: .any)
    self.inputFieldView.setBackgroundImage(UIImage(), forToolbarPosition: .any, barMetrics: .default)
    self.inputFieldView.removeFromSuperview()

这对 ios 版本 10 和 9 非常有用。它是带有 "Send" 按钮的文本视图。它位于屏幕底部,按下时会成为第一响应者,允许键盘出现并正确定位。

使用 ios 11 时,我什至无法点击它,所以我根本无法输入。

解决了。看起来 UIToolbar 在 iOS 11.

中无法正常工作

将其更改为 UIView 并删除了

self.inputFieldView.isTranslucent = false
self.inputFieldView.setShadowImage(UIImage(), forToolbarPosition: .any)
self.inputFieldView.setBackgroundImage(UIImage(), forToolbarPosition: .any, barMetrics: .default)

让它工作(并将它从 xib 中的 UIToolbar 更改为 UIView。)

这是 iOS 11 上的一个已知错误。UIToolbar 子视图无法获取触摸事件,因为工具栏的一些内部视图未正确设置。

当前的解决方法是在添加子视图之前调用 toolBar.layoutIfNeeded()。

你的情况:

inputFieldView.layoutIfNeeded()

希望这会在下一个主要版本中得到修复。