我正在尝试向我创建的表视图添加约束,并以编程方式添加到视图中。我想基于UITextField
的{{1}}约束它。但是,出现以下错误:
***由于未捕获的异常“ NSGenericException”而终止应用程序,原因:“无法激活具有锚点的约束,因为它们没有共同的祖先。约束或其锚点是否引用了不同视图层次结构中的项目?那是非法的。'
IBOutlet
@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
如何添加此约束?
答案 0 :(得分:1)
答案在错误消息中。您的属性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
答案 1 :(得分:0)
您应该使用它而不是您的代码: 对于集合约束,您应该将代码修改为以下内容:
func setConstraints(to view: UIView , superView: UIView) {
self.translatesAutoresizingMaskIntoConstraints = false
let leading = NSLayoutConstraint(item: self, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0.8)
let trailing = NSLayoutConstraint(item: self, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: -0.8)
let width = NSLayoutConstraint(item: self, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 320)
let height = NSLayoutConstraint(item: self, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 120)
superView.addConstraints([leading, trailing])
self.addConstraints([width, height])
}
和第一部分:最好将MyTableView对象定义为零帧(这只会帮助您不要出错),并将视图控制器发送给constraint,因为它需要向层次结构位置添加约束。 因此请执行以下操作:
myTableView = MyTableView(frame: .zero, style: .plain)
myTableView!.isHidden = false
myTableView!.backgroundColor = UIColor.green
self.view.addSubview(myTableView!)
myTableView.setConstraints(to: authorTextField , superView: self)