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的宽度的主要内容,如果未能解决你的问题,请参考以下文章