我正在尝试将约束添加到我以编程方式创建并添加到视图的tableview中。我想基于一个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


// 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
}

如何添加此约束?

最佳答案

答案在错误信息中。属性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

关于ios - 由于没有共同的祖先IBOutlet和代码,因此无法激活,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55572980/

10-12 04:06