如何定位相对于包含视图大小的子视图?

我希望能够将我的子视图放置在超级视图大小的25%的顶部。

NSLayoutConstraint *topPositionConstraint = [NSLayoutConstraint constraintWithItem:_containerView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:_childView attribute:NSLayoutAttributeHeight multiplier:0.25f constant:0.0f]; 

但是,现在我收到以下exception:

 'NSInvalidArgumentException', reason: '*** +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: Invalid pairing of layout attributes' 

为什么错误发生,我怎么能达到我想要的?

您不能在相同的约束中使用顶部和高度。 尽pipe说系统不喜欢它是有道理的。

你可以做什么,而不是像…

 NSLayoutConstraint *topPositionConstraint = [NSLayoutConstraint constraintWithItem:_childView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:_containerView attribute:NSLayoutAttributeTop multiplier:1.0 constant:_containerView.frame.size.height * 0.25]; 

如果不使用框架,而是使用底部而不是高度,则可以将百分比移至乘数。 我正在使用这种技术用于基于百分比的子视图定位。 这也很好,因为在创build约束时,可能不会设置容器视图的框架:

 NSLayoutConstraint *topPositionConstraint = [NSLayoutConstraint constraintWithItem:_childView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:_containerView attribute:NSLayoutAttributeBottom multiplier:0.25 constant:0];