iOS自动布局:将尾随空格设置为等于超视图的宽度

时间:2013-06-28 15:57:06

标签: ios cocoa-touch autolayout

我需要使用自动布局在超级视图的右边界外放置一个视图。

我正在尝试通过指定以下NSLayoutConstraint来执行此操作:

NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:self.downloadView
                                                                  attribute:NSLayoutAttributeLeft
                                                                  relatedBy:NSLayoutRelationEqual
                                                                     toItem:self.contentView
                                                                  attribute:NSLayoutAttributeWidth
                                                                 multiplier:1.0
                                                                   constant:0.0];

self.downloadView包含的是self.contentView的子视图。 通过这样做iOS抱怨有以下例外:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: Invalid pairing of layout attributes'

有人可以解释为什么我不能将这两个属性配对,我怎样才能达到目标?

1 个答案:

答案 0 :(得分:8)

是的,您不能将leading属性设置为与contentView的width属性相关。但是,您可以将downloadView的主要属性设置为相对于其superview的尾随属性contentView

NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:self.downloadView
                                                                  attribute:NSLayoutAttributeLeading
                                                                  relatedBy:NSLayoutRelationEqual
                                                                     toItem:self.contentView
                                                                  attribute:NSLayoutAttributeTrailing
                                                                 multiplier:1.0
                                                                   constant:0.0];

或者您可以将downloadView的主要属性定义为相对于contentView的主要属性,但是然后将constant设置为某个值,例如宽度的观点。但是,这种技术的问题是,在方向更改时,constant将不再适用,您可能需要对其进行调整。