约束以编程方式添加到xib视图不起作用

时间:2014-07-03 16:13:25

标签: ios objective-c storyboard xib

我有一个从xib创建的视图(self.printSettingsView)。我将此视图作为子视图添加到另一个视图(self.view)。我以编程方式添加约束如下:

[self.printSettingView setTranslatesAutoresizingMaskIntoConstraints: NO];
NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                  attribute:NSLayoutAttributeLeading
                                                                  relatedBy:NSLayoutRelationEqual
                                                                     toItem:self.view
                                                                  attribute:NSLayoutAttributeLeading
                                                                 multiplier:1.0
                                                                   constant:0];
[self.view addConstraint:leftConstraint];
NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                 attribute:NSLayoutAttributeTop
                                                                 relatedBy:NSLayoutRelationEqual
                                                                    toItem:self.topBar
                                                                 attribute:NSLayoutAttributeBottom
                                                                multiplier:1.0
                                                                  constant:0];
[self.view addConstraint:topConstraint];
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                   attribute:NSLayoutAttributeHeight
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:self.view
                                                                   attribute:NSLayoutAttributeHeight
                                                                  multiplier:1.0
                                                                    constant:0];
[self.view addConstraint:heightConstraint];
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                   attribute:NSLayoutAttributeWidth
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:self.view
                                                                   attribute:NSLayoutAttributeWidth
                                                                  multiplier:1.0
                                                                    constant:0];
[self.view addConstraint:widthConstraint];

除高度外,所有其他约束都会生效。 我在这里做错了什么???

由于

2 个答案:

答案 0 :(得分:0)

在不知道你的xib文件的约束或你期望发生什么与正在发生的事情(截图会有所帮助)的情况下,很难说。但是我确实有一个建议可能逻辑不正确。

第二个约束是将printViewSettings固定在topBar的底部,这部分是有意义的。然而,下一个将printViewSettings的高度设置为其superview的高度。这可能不符合您的要求,因为您的超级视图也包含您的topBar,因此可能比您预期的要大。你真正想要的是一个约束,它将printViewSettings的底部固定在superview的底部。

答案 1 :(得分:0)

对不起那些关于不完整信息的人。一个要点的问题是我在主视图中为子视图分配了一个约束,无论是约束的常量,子视图的大小保持不变。我发现问题是子视图反过来具有固定高度约束的组件(子视图)。我使它们与父视图的高度成比例,现在可以正常工作。