iOS 11 中自定义键盘显示在错误的位置

Custom keyboard displays in wrong location in iOS 11

我们有一个已经使用多年的自定义键盘。它是在 iOS8 首次出现时创建的,并在 iOS 9 中为 Swift 重新编写。它以编程方式构建,不涉及笔尖。 在安装了 iOS 11 的 iPad 设备上,它显示的大约 75px 太高了。整个键盘都存在并且可以使用,但它下面有一个灰色条。我有一个 10.3.2 的 iPad,它工作得很好。在带有 iPad air 2 的模拟器和我们拥有的两个带 iOS 11 的物理设备上,它显示得太高了。 本来它根本没有任何约束。我添加了高度限制,但这没有任何用处。

override func viewDidLoad() {
    ...
    let size = self.orientationUtil.getSizeForCurrentOrientation()
    heightConstraint = NSLayoutConstraint(item: self.inputView as Any,
                                  attribute: NSLayoutAttribute.height,
                                  relatedBy: NSLayoutRelation.equal,
                                  toItem: nil,
                                  attribute: NSLayoutAttribute.notAnAttribute,
                                  multiplier: 1.0,
                                  constant: size.height)
   ...
}

override func updateViewConstraints() {
    super.updateViewConstraints()

    if (self.view.frame.size.width == 0 || self.view.frame.size.height == 0) {
        return
    }
    let size = self.orientationUtil.getSizeForCurrentOrientation()
    inputView?.removeConstraint(heightConstraint!)
    heightConstraint!.constant = size.height
    inputView?.addConstraint(heightConstraint!)
}

此处的代码是否足以确保键盘位于主机视图的底部?提供正确的高度约束是否足以让系统知道它应该显示在哪里?我考虑过尝试底部约束,但我不确定我将使用什么作为 toItem: 参数。有没有其他人注意到他们的键盘在 iPad 和 iOS 11 上显示不正确?

TIA, 麦克

我发现键盘的内容需要限制在视图的底部。在我的例子中,我们的键盘(一个 UIView)在 self.keyboard.

self.keyboard.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true self.keyboard.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true

添加这两行后,键盘固定在底部。

麦克