iOS 11 inputAccessoryView 坏了

Posted

技术标签:

【中文标题】iOS 11 inputAccessoryView 坏了【英文标题】:iOS 11 inputAccessoryView broken 【发布时间】:2017-09-22 18:51:52 【问题描述】:

我在视图控制器上为我的 UIToolBar / Accessory View 进行了以下设置

@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 非常有效。它是一个带有“发送”按钮的文本视图。它位于屏幕底部,按下时会成为第一响应者,允许键盘出现并正确定位。

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

【问题讨论】:

【参考方案1】:

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

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

在你的情况下:

inputFieldView.layoutIfNeeded()

希望这将在下一个主要版本中得到解决。

【讨论】:

@ahbou 你知道是否有为此申请的雷达吗?如果可能的话,我想跟踪它【参考方案2】:

解决了。看起来 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。)

【讨论】:

你能显示你的完整代码吗?我正在努力让它出现。 您是想重现我的问题,还是解决您自己的问题? @arvidurs

以上是关于iOS 11 inputAccessoryView 坏了的主要内容,如果未能解决你的问题,请参考以下文章

从 inputAccessoryView 到 tableView 的动画文本,如 iOS 11 消息应用程序

ObjC iOS11:在 inputAccessoryView 中成为第一响应者时,TextField 不显示

inputAccessoryView 类似 iOS Mail

iOS 11 键盘和附件视图之间的额外空间

InputAccessoryView 的 viewWillDisappear:iOS 9 早期调用的方法

InputAccessoryView 在 iOS 8 模拟器上不显示