iOS自动布局问题

时间:2014-03-18 07:32:40

标签: ios constraints autolayout

我试图以编程方式制作约束。我在IB中创建了textField和button。这是代码:

UIView *superview = self.view;

self.button.translatesAutoresizingMaskIntoConstraints = NO;
self.textField.translatesAutoresizingMaskIntoConstraints = NO;

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self.textField
                                                              attribute:NSLayoutAttributeCenterY
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:superview
                                                              attribute:NSLayoutAttributeCenterY
                                                             multiplier:1.0f
                                                                constant:0];
[superview addConstraint:constraint];

constraint = [NSLayoutConstraint constraintWithItem:self.textField
                                          attribute:NSLayoutAttributeCenterX
                                          relatedBy:NSLayoutRelationEqual
                                             toItem:superview
                                          attribute:NSLayoutAttributeCenterX
                                         multiplier:1.0f
                                           constant:0];
[superview addConstraint:constraint];

constraint =[NSLayoutConstraint constraintWithItem:self.button
                                           attribute:NSLayoutAttributeTrailing
                                           relatedBy:NSLayoutRelationEqual
                                              toItem:self.textField
                                           attribute:NSLayoutAttributeLeading
                                          multiplier:1
                                            constant:-10];

[superview addConstraint:constraint];

constraint =[NSLayoutConstraint constraintWithItem:self.button
                                           attribute:NSLayoutAttributeBaseline
                                           relatedBy:NSLayoutRelationEqual
                                              toItem:self.textField
                                           attribute:NSLayoutAttributeBaseline
                                          multiplier:1
                                            constant:0];

[superview addConstraint:constraint];

运行后我遇到了这个问题:enter image description here 约束也对视图没有影响。 我做错了什么?

2 个答案:

答案 0 :(得分:2)

首先在故事板编辑器中选择要更改的视图控制器,然后在约束编辑器中选择“在视图控制器中添加缺少的约束” enter image description here 通过重新构建和添加新约束来选择要在运行时修改的元素,在对象检查器面板中选择每个约束并通过选中“占位符:在构建时删除”框来编辑它。

enter image description here

这是对故事板编辑说的一种方式,你可以不应用约束蚂蚁,或者抱怨约束条件不足。 标记的约束在运行时被删除,因此您应该提供自己的约束,如果您在正确的位置执行,则更好。视图控制器中的Ovverride -updateViewConstraints并记得调用super并添加新约束。

答案 1 :(得分:0)

您有三个自动生成的约束“在构建时为具有固定帧的视图生成的IB自动生成”。这些与你自己制造的冲突。您可能已在Interface Builder中的文本字段和按钮上设置了固定大小属性。可能,您的按钮上有一个固定的宽度,并且与尾随约束冲突。

将IB与代码约束相结合可能会非常棘手。我发现通常只在IB中或仅在代码中设计东西以避免像这样的冲突更容易,尽管将两者结合起来是完全可行的。

有关NSIBPrototypingLayoutConstraint的详细解释,请查看此SO答案: Trouble with AutoLayout on UITableViewCell