IBOutlets 的约束冲突

IBOutlets' constraints conflict

当我尝试手动设置 IBOutlet 的约束时,我遇到了 NSLayoutConstraint 冲突。本质上,我只是将视图放在故事板中以大致了解它们的外观,然后创建 IBOutlets 来引用它们。但是在代码中添加了所有约束:

class LoginViewController: UIViewController, UITextFieldDelegate {


    @IBOutlet weak var view1: UIView!
    @IBOutlet weak var view2: UView2!
    @IBOutlet weak var name: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()


        view2.addSubview(name)

        //add constraints
        NSLayoutConstraint(item: view1, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0).active = true
        NSLayoutConstraint(item: view1, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: -self.view.frame.height * 0.07).active = true
        NSLayoutConstraint(item: view1, attribute: .Width, relatedBy: .Equal, toItem: self.view, attribute: .Width, multiplier: 0.8, constant: 0).active = true
        NSLayoutConstraint(item: view1, attribute: .Height, relatedBy: .Equal, toItem: self.view, attribute: .Height, multiplier: 0.4, constant: 0).active = true

        NSLayoutConstraint(item: view2, attribute: .Width, relatedBy: .Equal, toItem: view1, attribute: .Width, multiplier: 1, constant: 0).active = true
        NSLayoutConstraint(item: view2, attribute: .CenterX, relatedBy: .Equal, toItem: view1, attribute: .CenterX, multiplier: 1, constant: 0).active = true
        NSLayoutConstraint(item: view2, attribute: .Top, relatedBy: .Equal, toItem: view1, attribute: .Bottom, multiplier: 1, constant: self.view.frame.height * 0.01).active = true
        NSLayoutConstraint(item: view2, attribute: .Height, relatedBy: .Equal, toItem: self.view, attribute: .Height, multiplier: 0.1, constant: 0).active = true



      }
 }

当我在代码中创建视图时,NSLayoutConstraint 冲突消失了,即 var view2 = UIView() 或者如果我注释掉 view2 的约束。没看懂。

编辑:根据日志,问题似乎是 NSIBPrototypingLayoutConstraintUIView-Encapsulated-Layout-Height' 对于 view2 尽管情节提要中没有设置自动布局约束。现在让我困惑的是为什么 view1 没有这个问题,因为它们都被添加到故事板中了?

你还没有在storyboard中给view2设置约束,所以Xcode偷偷给你加了约束。您需要做的是在情节提要中为 view2 添加约束,并且(因为您在运行时并不真正需要它们)告诉 Xcode 在构建时删除这些约束: