由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:未知的布局属性'

时间:2015-06-05 01:11:25

标签: ios swift

我试图以编程方式将约束添加到UIView中的按钮:

let constraint = NSLayoutConstraint(item: arrowButton, attribute: NSLayoutAttribute.LeadingMargin, relatedBy: NSLayoutRelation.Equal, 
                 toItem: self, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 10)
arrowButton.addConstraint(constraint)

我希望按钮的前边距距离视图的左边距为10。此代码在视图中运行,因此self是视图。上面的代码给出了错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: Unknown layout attribute'

我做错了什么?

2 个答案:

答案 0 :(得分:6)

NSLayoutAttributeNotAnAttribute:

占位符值,用于指示约束的第二个项目和第二个属性未在任何计算中使用。在创建为属性指定常量的约束时使用此值。例如,item1.height> = 40. 如果约束只有一个项目,则将第二个项目设置为nil,并将第二个属性设置为NSLayoutAttributeNotAnAttribute。

您有两个项目:arrowButtonself,但您指定NSLayoutAttributeNotAnAttribute说我只需要一个项目。这就是它失败的原因。

我建议您先使用storybard或xib来练习自动布局,然后再感受它是如何工作的,然后再开始编码。你明显误解了自动布局。如果要定义两个视图的布局关系,则NSLayoutAttributeNotAnAttribute永远无效。

答案 1 :(得分:2)

NSLayoutAttribute.NotAnAttribute

我认为这是问题所在。你传递了NotAnAttribute

此外,它应该是self.addConstraint(constraint)