2017-10-09 113 views
0

我们有一个多年来一直工作的自定义键盘。它是在iOS8中创建的,当它们首次出现并在iOS 9中为Swift重写时。它是以编程方式构建的,没有涉及到nib。 在安装了iOS 11的iPad设备上,它显示的高度约为75px。整个键盘都存在并且功能正常,但它下面有一个灰色条。我有一个10.3.2的iPad,它工作得很好。在iPad air 2的模拟器上,以及我们在iOS 11中使用的两个物理设备显示的太高。 最初它没有任何限制。我为高度添加了一个限制,但这并没有什么好处。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:参数。有没有人注意到他们的键盘在iOS 11的iPad上显示不正确?

TIA, 迈克

+0

嗨@mikey解决这个问题? – Rock

+1

Hi @Rock。是的,我想出了解决方案,并将其作为下面的答案发布。对不起,我忘了回来,并将其标记为答案。我刚纠正了这个疏漏。解决方案是添加bottomAnchor约束。此解决方案可能无法为您工作。在我们的例子中,我们希望能够在两个不同的键盘,一个字母键盘和一个图像键盘之间切换。在解决方案中,代码'self'是UIInputViewController,self.keyboard是我们的扩展UIView的键盘。所以我们不得不将键盘视图锚定到UIInputViewController的内置视图中。 – Mikey

回答

1

我发现键盘的内容需要被约束到视图的底部。在我的情况下,我们的键盘(一个UIView)在self.keyboard中。

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

键盘定居在底部后,我将这两行。

Mike