iOS自动布局:设置尾随空间等于superview的宽度

Posted

技术标签:

【中文标题】iOS自动布局:设置尾随空间等于superview的宽度【英文标题】:iOS Auto Layout: Set the trailing space equal to the width of the superview 【发布时间】:2013-06-28 15:57:05 【问题描述】:

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

我正在尝试通过指定以下 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】:

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

【讨论】:

我通过将常量设置为视图的宽度来解决这个问题。但是正如您所说,如果方向改变,这将停止工作。我更喜欢方向更改安全的解决方案。 @LucaBernardi 是的,我概述的第一种方法是方向安全的解决方案。

以上是关于iOS自动布局:设置尾随空间等于superview的宽度的主要内容,如果未能解决你的问题,请参考以下文章

iOS 如何设置约束以适应设备屏幕?

没有显式宽度限制且尾随空间大于或等于行为不端的自动布局

视图和超级视图自动布局的比例高度

如何在 xcode 自动布局中使对象自动调整大小?

使用自动布局调整同级视图的大小时,使用子视图重新定位 UIView 不起作用

iOS 自动布局更改前导和尾随空格