以编程方式添加约束不起作用

时间:2016-04-16 13:33:51

标签: ios swift constraints

我一直在尝试以编程方式将约束添加到我也以编程方式添加到视图控制器的视图中。但是,似乎没有遵循约束条件。

该视图已添加到视图控制器的故事板中,但直到稍后才会实际添加到视图控制器的视图中(参见下面的屏幕截图)。

enter image description here

我尝试过添加各种约束,但到目前为止还没有任何约束。我现在把它简化为下面的单一约束,即使这样也行不通。我做错了什么?

@IBOutlet var loadingView: LoadingView!

override func viewDidLoad() {
    super.viewDidLoad()
    displayLoadingView(true)
}

func displayLoadingView(display: Bool) {
    if display {
        view.addSubview(loadingView)

        let widthConstraint = NSLayoutConstraint(item: loadingView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 50.0)

        view.addConstraint(widthConstraint)
    }
}

2 个答案:

答案 0 :(得分:21)

int设置为以编程方式设置约束的任何视图。

来自apple doc
translatesAutoresizingMaskIntoConstraints

  

如果要使用“自动布局”动态计算视图的大小和位置,则必须将此属性设置为false,然后为视图提供非模糊,非冲突的约束集。

答案 1 :(得分:2)

您没有设置所有必要的约束,这可能是原因。考虑以下粗略的例子。 MyView接口在独立的xib文件中定义。希望它有所帮助:

 class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        guard let myView = loadFromNib("MyView") else {
            return
        }

        view.addSubview(myView)

        myView.translatesAutoresizingMaskIntoConstraints = false
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-15-[myView]-15-|", options: NSLayoutFormatOptions.DirectionLeadingToTrailing, metrics: nil, views: ["myView": myView]))

        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-15-[myView]-15-|", options: NSLayoutFormatOptions.DirectionLeadingToTrailing, metrics: nil, views: ["myView": myView]))
    }

    func loadFromNib(cls: String) -> UIView? {

        return  NSBundle.mainBundle().loadNibNamed(cls, owner: nil, options: nil)[0] as? UIView
    }
}