iOS 8自定义键盘应用程序扩展 - 更改方向的高度

Jon*_*Jon 6 ios swift ios-app-extension custom-keyboard

根据文档,更改自定义键盘的高度很简单.这是Apple文档中显示的swift等效版本的代码

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    let constraint = NSLayoutConstraint(item: self.view, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0.0, constant: 400.0)
    self.view.addConstraint(constraint)
}
Run Code Online (Sandbox Code Playgroud)

这确实有效,但它会将高度更改为CONSTANT值,如果更改设备的方向,则该值不可取.在纵向模式下将键盘高度设置为400.0可能没问题,但在横向模式下可能不合适.例如:iPhone 5的标准键盘视图大小为纵向320,216和横向568,162.设置恒定高度会将键盘视图大小更改为纵向的320,400和横向的568,400(实际上是整个屏幕).

我现在唯一想到的是创建一个字典,其中包含每种设备类型和每个方向的键盘视图大小,然后在每次设备更改方向时更新恒定高度约束.有没有人找到更优雅的解决方案?

cmy*_*myr 2

willAnimateRotationToInterfaceOrientation:我通过在键盘的视图控制器中实现来完成此操作。理论上我们应该使用 new willTransitionToTraitCollection:withTransitionCoordinator:或理想情况下的 Maybe viewWillTransitionToSize:withTransitionCoordinator:,但这些似乎不会在 UIInputViewControllers 上被调用,至少从 8.0.2 开始是这样。因此,目前最好的选择似乎是保留对 heightConstraint 的引用,并修改 willAnimateRotation.

我还记得在实际弄清楚新方向时遇到了一些问题;我最终做了类似的事情:

let isLandscape: Bool = UIInterfaceOrientationIsLandscape(toInterfaceOrientation)然后使用它。