背景:--我正在使用接口生成器构建一个论坛,其中视图控制器中有一个表视图,外部有一个输入附件视图。在运行时,输入附件视图将被添加到表视图中,并成为一个类似信使的输入条。

我试图通过更改高度约束来实现输入附件视图上的自动调整功能(通常在消息传递应用程序中可以看到)。但是,无法在接口构建器中创建输入附件视图的高度约束,所以我只是在代码中添加了它们。
NSLayoutConstraint *inputAccessoryConstraint = [NSLayoutConstraint constraintWithItem:self.inputAccessoryView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:100];
[self.inputAccessoryView addConstraint:inputAccessoryConstraint];并收到以下警告:
Unable to simultaneously satisfy constraints.
...
(
"<NSLayoutConstraint:0x7fa5a413f450 V:[UIView:0x7fa5a264f8d0(100)]>",
"<NSLayoutConstraint:0x7fa5a2483890 '_UIKBAutolayoutHeightConstraint' V:[UIView:0x7fa5a264f8d0(44)]>"
)问题是,我的新约束与运行时中添加的一个autolayout约束相冲突。如何删除/修改代码中的autolayout约束?
发布于 2014-11-07 14:52:03
在添加您的(100)之前,您可能希望删除现有的高度约束(44)。但是,您也可以只编辑现有的约束:
下面的块是浏览inputAccessoryView的约束并找到高度约束。然后将值设置为100,而不是44。
for (NSLayoutConstraint* constraint in YOURINPUTACCESSORYVIEW.constraints) {
if ([NSStringFromClass([NSLayoutConstraint class]) isEqualToString:NSStringFromClass([constraint class])])
{
if (constraint.firstAttribute == NSLayoutAttributeHeight || constraint.secondAttribute == NSLayoutAttributeHeight)
{
constraint.constant = 100;
}
}
}发布于 2015-01-07 12:53:31
嘿,我找到了解决这个问题的最好方法,就像Mathieu说的,通过改变_UIKBAutolayoutHeightConstraint常数。这可以在目标C中这样实现:
NSLayoutConstraint *constraint = [[self.inputAccessoryView constraints] objectAtIndex:0];
constraint.constant = 100;或者像这样在斯威夫特:
let constraint:NSLayoutConstraint = (inputAccessoryView!.constraints() as NSArray).objectAtIndex(0) as NSLayoutConstraint
constraint.constant = 52如果希望在视图出现之前重新加载inputAccessoryView的高度,则可以在updateViewConstraints中执行。希望这能有所帮助。
发布于 2015-07-16 18:48:12
我有同样的问题,并找到了一个简单的解决办法。只需将发送按钮和文本视图嵌入中间视图即可。强制该视图的高度为100.f,并使用自动布局约束将其附加到其超级视图(即键盘输入附件视图)的左侧、右侧和底部。然后确保输入附件视图没有剪辑它的子视图。
瞧,系统仍然会将输入附件视图的高度调整到44.f,但这并不重要,在视觉上它将是预期的大小。也没有警告。

https://stackoverflow.com/questions/26802750
复制相似问题