我需要使用自动布局在超级视图的右边界外放置一个视图。
我正在尝试通过指定以下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'
有人可以解释为什么我不能将这两个属性配对,我怎样才能达到目标?
答案 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
将不再适用,您可能需要对其进行调整。