将领先空间设置为UIView,迅速崩溃

时间:2015-07-13 11:31:51

标签: ios swift autolayout

我需要修改视图的前导空间。这是我的代码

    let advSearchViewAddLeadingConstraint: NSLayoutConstraint = NSLayoutConstraint(
        item:advancedSearchView,
        attribute:NSLayoutAttribute.Leading,
        relatedBy:NSLayoutRelation.Equal,
        toItem:self.view, 
        attribute:NSLayoutAttribute.NotAnAttribute,
        multiplier:0,
        constant:200)
        self.view.addConstraint(advSearchViewAddLeadingConstraint)

通过使用此代码我正在崩溃

  

*由于未捕获的异常终止应用' NSInvalidArgumentException',原因:' * + [NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: ]:未知的布局属性'

2 个答案:

答案 0 :(得分:1)

我会以相反的方式工作。创建一个包含视图并拖动IBOutlet以获得前导空间约束。然后只需更改常量,它应该更好。

leadingConstraint.constant = 200
self.view.layoutIfNeeded()

答案 1 :(得分:0)

您可能需要NSLayoutAttribute.Leading而不是NSLayoutAttribute.NotAnAttribute。如果您要提供两个项目,则需要指定每个项目的属性:

let advSearchViewAddLeadingConstraint: NSLayoutConstraint =
    NSLayoutConstraint(
        item:advancedSearchView,
        attribute:NSLayoutAttribute.Leading,
        relatedBy:NSLayoutRelation.Equal,
        toItem:self.view, 
        attribute:NSLayoutAttribute.Leading,
        multiplier:0,
        constant:200)

其他几点说明:

  • 您可以使用以下内容激活约束:advSearchViewAddLeadingConstraint.active = true

  • 在Swift中,类型推断可以帮助您使用枚举类型,因此您只需键入NSLayoutAttribute.Leading而不是键入Leading