无法激活,因为它们没有共同的祖先 IBOutlet 和代码

jsl*_*oop 6 ios swift ios-autolayout

我正在尝试向我创建并添加以编程方式查看的表视图添加约束。我想根据 a 来约束它,UITextField这是一个IBOutlet. 但是,我收到以下错误:

*** 由于未捕获的异常“NSGenericException”而终止应用程序,原因:“无法激活带有锚点的约束,因为它们没有共同的祖先。约束或其锚点是否引用不同视图层次结构中的项目?这是非法的。

@IBOutlet weak var authorTextField: UITextField!

override func viewDidLoad() {
    myTableView = MyTableView(frame: CGRect(x: 0, y: 80, width: 320, height: 120), style: .plain)
    myTableView!.isHidden = false
    myTableView!.backgroundColor = UIColor.green
    self.view.addSubview(myTableView!)
    myTableView.setConstraints(to: authorTextField)  // <-- this fails

Run Code Online (Sandbox Code Playgroud)
// MyTableView.swift ..
func setConstraints(to view: UIView)
    self.translatesAutoresizingMaskIntoConstraints = false
    self.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8.0).isActive = true
    self.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8.0).isActive = true
}
Run Code Online (Sandbox Code Playgroud)

如何添加这个约束呢?

Erh*_*rci 13

如果您没有将视图添加到视图层次结构中,则会遇到此问题。我添加了 addSubview 并且运行良好

addSubview(view)
Run Code Online (Sandbox Code Playgroud)

或者

self.view.addSubview(view)
Run Code Online (Sandbox Code Playgroud)


Mar*_*ren 2

答案就在错误消息中。您的属性authorTextField位于另一个视图层次结构中。进入故事板并将文本字段放在同一视图中。另一方面,不要混合设置框架和自动布局约束,我认为你在这里感到困惑。代替

MyTableView(frame: CGRect(x: 0, y: 80, width: 320, height: 120), style: .plain)

写

MyTableView(frame: CGRect.zero, style: .plain)

并向您的 setConstraints 方法添加高度约束

self.view.heightAnchor.constraint(equalToConstant: 120).isActive = true