我试图以编程方式将约束添加到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'
我做错了什么?
答案 0 :(得分:6)
NSLayoutAttributeNotAnAttribute:
占位符值,用于指示约束的第二个项目和第二个属性未在任何计算中使用。在创建为属性指定常量的约束时使用此值。例如,item1.height> = 40. 如果约束只有一个项目,则将第二个项目设置为nil,并将第二个属性设置为NSLayoutAttributeNotAnAttribute。
您有两个项目:arrowButton
和self
,但您指定NSLayoutAttributeNotAnAttribute
说我只需要一个项目。这就是它失败的原因。
我建议您先使用storybard或xib来练习自动布局,然后再感受它是如何工作的,然后再开始编码。你明显误解了自动布局。如果要定义两个视图的布局关系,则NSLayoutAttributeNotAnAttribute
永远无效。
答案 1 :(得分:2)
NSLayoutAttribute.NotAnAttribute
,
我认为这是问题所在。你传递了NotAnAttribute
此外,它应该是self.addConstraint(constraint)