我正在尝试将约束添加到我以编程方式创建并添加到视图的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/