首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除/修改代码中的自动删除约束

删除/修改代码中的自动删除约束
EN

Stack Overflow用户
提问于 2014-11-07 13:49:57
回答 3查看 1.2K关注 0票数 1

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

我试图通过更改高度约束来实现输入附件视图上的自动调整功能(通常在消息传递应用程序中可以看到)。但是,无法在接口构建器中创建输入附件视图的高度约束,所以我只是在代码中添加了它们。

代码语言:javascript
运行
复制
NSLayoutConstraint *inputAccessoryConstraint = [NSLayoutConstraint constraintWithItem:self.inputAccessoryView
                                                                            attribute:NSLayoutAttributeHeight
                                                                            relatedBy:NSLayoutRelationEqual
                                                                               toItem:nil attribute:NSLayoutAttributeNotAnAttribute
                                                                           multiplier:1.0
                                                                             constant:100];

[self.inputAccessoryView addConstraint:inputAccessoryConstraint];

并收到以下警告:

代码语言:javascript
运行
复制
Unable to simultaneously satisfy constraints.
...
(
"<NSLayoutConstraint:0x7fa5a413f450 V:[UIView:0x7fa5a264f8d0(100)]>",
"<NSLayoutConstraint:0x7fa5a2483890 '_UIKBAutolayoutHeightConstraint' V:[UIView:0x7fa5a264f8d0(44)]>"
)

问题是,我的新约束与运行时中添加的一个autolayout约束相冲突。如何删除/修改代码中的autolayout约束?

EN

回答 3

Stack Overflow用户

发布于 2014-11-07 14:52:03

在添加您的(100)之前,您可能希望删除现有的高度约束(44)。但是,您也可以只编辑现有的约束:

下面的块是浏览inputAccessoryView的约束并找到高度约束。然后将值设置为100,而不是44。

代码语言:javascript
运行
复制
for (NSLayoutConstraint* constraint in YOURINPUTACCESSORYVIEW.constraints) {
    if ([NSStringFromClass([NSLayoutConstraint class]) isEqualToString:NSStringFromClass([constraint class])])
    {
        if (constraint.firstAttribute == NSLayoutAttributeHeight || constraint.secondAttribute == NSLayoutAttributeHeight)
        {
            constraint.constant = 100;
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2015-01-07 12:53:31

嘿,我找到了解决这个问题的最好方法,就像Mathieu说的,通过改变_UIKBAutolayoutHeightConstraint常数。这可以在目标C中这样实现:

代码语言:javascript
运行
复制
NSLayoutConstraint *constraint = [[self.inputAccessoryView constraints] objectAtIndex:0];
constraint.constant = 100;

或者像这样在斯威夫特:

代码语言:javascript
运行
复制
let constraint:NSLayoutConstraint = (inputAccessoryView!.constraints() as NSArray).objectAtIndex(0) as NSLayoutConstraint
constraint.constant = 52

如果希望在视图出现之前重新加载inputAccessoryView的高度,则可以在updateViewConstraints中执行。希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2015-07-16 18:48:12

我有同样的问题,并找到了一个简单的解决办法。只需将发送按钮和文本视图嵌入中间视图即可。强制该视图的高度为100.f,并使用自动布局约束将其附加到其超级视图(即键盘输入附件视图)的左侧、右侧和底部。然后确保输入附件视图没有剪辑它的子视图。

瞧,系统仍然会将输入附件视图的高度调整到44.f,但这并不重要,在视觉上它将是预期的大小。也没有警告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26802750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档