在iOS8自定义键盘中无法获得约束

时间:2014-11-30 20:14:23

标签: ios swift ios-app-extension

我在iOS 8中遇到自动布局的主要问题。我正在使用自定义键盘,但我无法让视图以正确的高度显示。设备上呈现的视图太低,更像是单独的UIImageView的预期高度。我已经设置了约束,如图所示:

XCode Screenshot

但是我一直在日志中收到这个错误,它没有告诉我任何事情(可能是因为我不明白在哪里看):

2014-12-06 19:56:45.095 [40268:12181198] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this:(1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x600000096940 V:[UIInputView:0x7fe780d3f600(246)]>",
    "<NSLayoutConstraint:0x600000097390 'UIView-Encapsulated-Layout-Height' V:[UIInputView:0x7fe780d3f600(0)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600000096940 V:[UIInputView:0x7fe780d3f600(246)]>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

我已尝试按照iOS 8 Custom Keyboard: Changing the Height中的代码进行操作,但仍无法使用。

修改

我使用以下功能设置我的身高限制:

override func updateViewConstraints() {
    super.updateViewConstraints()
    // Add custom view sizing constraints here
    let changeToOrientation = deviceInfoService.getOrientationForView(self.inputView)

    if (changeToOrientation == Orientation.Portrait) {
        self._heightConstraint!.constant = 246
        self.inputView.addConstraint(self._heightConstraint!)
    } else {
        self._heightConstraint!.constant = 192
        self.inputView.addConstraint(self._heightConstraint!)
    }
}

3 个答案:

答案 0 :(得分:6)

这看起来像iOS自定义键盘实现中的错误。目前的解决方法是将约束的优先级调整为多于/少于1000

答案 1 :(得分:2)

错误告诉您有冲突的约束。 UIView-Encapsulated-Layout-Height似乎是一个预先定义的高​​度(搜索时我大部分都在UICollectionView找到了对其用法的引用)。我猜测它是操作系统定义的键盘允许的高度。另一个约束很可能是您创建的视图的内在内容大小(316和30确实合计为246)。

我的结论是,当你改变身高时,你可能做错了什么。由于我对键盘扩展开发不太熟悉,我无法告诉你什么。然而,当涉及到我已经使用过的今日扩展时,有一种方法可以覆盖指定小部件的高度。

答案 2 :(得分:1)

这类似于如何提供TodayExtension高度。试试这个:

self.preferredContentSize = CGSizeMake(320, 246);

这是我如何设置我今天的扩展的高度与明确设置高度约束的方式。我自己试试这个,现在就把一个示例键盘项目放在一起。