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

时间:2014-09-21 18:37:11

标签: ios swift ios-app-extension custom-keyboard

根据documentation更改自定义键盘的高度很简单。这是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)
}

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

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

1 个答案:

答案 0 :(得分:2)

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

我还记得实际上已经找到了新方向的一些问题;我最终做了类似的事情:

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