3

我需要使用自动布局将视图定位在其父视图的右边界之外。

我试图通过指定以下 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'

有人可以解释为什么我不能将这两个属性配对以及如何实现我的目标?

4

1 回答 1

8

是的,您不能将前导属性设置为与contentView. 但是,例如,您可以将 的前导属性设置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将不再适用,您可能必须对其进行调整。

于 2013-06-28T16:42:28.017 回答