为什么我不能将viewDidLoad方法中创建的视图约束到ViewControllers视图?

问题描述:

以下是我在ViewController中初始化UIView后得到的错误消息,然后将其限制在ViewController的主视图中。为什么我不能将viewDidLoad方法中创建的视图约束到ViewControllers视图?

Unable to activate constraint with anchors because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.

enter image description here

如果你看看我提供你会看到,在故事板,我可以刚落,另一个UIView的主视角的图片,然后我可以将其约束到的边缘主视图。这工作得很好,但我想知道如何在代码中做同样的事情。只需使用NSLayoutConstraint并将其固定到顶部,底部,前导和尾随似乎不适合我。任何有关这方面的见解都会很棒。

let webView: WKWebView = WKWebView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     webView.translatesAutoresizingMaskIntoConstraints = false 

     NSLayoutConstraint(item: webView, 
         attribute: .leading, 
         relatedBy: .equal, 
         toItem: view, 
         attribute: .leading, 
         multiplier: 1.0, 
         constant: 0.0).isActive = true 

     NSLayoutConstraint(item: webView, 
         attribute: .trailing, 
         relatedBy: .equal, 
         toItem: view, 
         attribute: .trailing, 
         multiplier: 1.0, 
         constant: 0.0).isActive = true 

     NSLayoutConstraint(item: webView, 
         attribute: .top, 
         relatedBy: .equal, 
         toItem: view, 
         attribute: .top, 
         multiplier: 1.0, 
         constant: 0.0).isActive = true 

     NSLayoutConstraint(item: webView, 
         attribute: .bottom, 
         relatedBy: .equal, 
         toItem: view, 
         attribute: .bottom, 
         multiplier: 1.0, 
         constant: 0.0).isActive = true 

     let url = NSURL (string: someURL); 
     let requestObj = NSURLRequest(url: url! as URL); 
     webView.load(requestObj as URLRequest); 
    } 

你似乎忘了添加约束之前的webView添加到view

view.addSubview(webView) 

最终代码:

webView.translatesAutoresizingMaskIntoConstraints = false 
view.addSubview(webView) 

NSLayoutConstraint(item: webView, 
        attribute: .leading, 
        relatedBy: .equal, 
        toItem: view, 
        attribute: .leading, 
        multiplier: 1.0, 
        constant: 0.0).isActive = true 

NSLayoutConstraint(item: webView, 
        attribute: .trailing, 
        relatedBy: .equal, 
        toItem: view, 
        attribute: .trailing, 
        multiplier: 1.0, 
        constant: 0.0).isActive = true 

NSLayoutConstraint(item: webView, 
        attribute: .top, 
        relatedBy: .equal, 
        toItem: view, 
        attribute: .top, 
        multiplier: 1.0, 
        constant: 0.0).isActive = true 

NSLayoutConstraint(item: webView, 
        attribute: .bottom, 
        relatedBy: .equal, 
        toItem: view, 
        attribute: .bottom, 
        multiplier: 1.0, 
        constant: 0.0).isActive = true 

let url = NSURL (string: ""); 
let requestObj = NSURLRequest(url: url! as URL); 
webView.load(requestObj as URLRequest); 
+0

我似乎无法使用addSubview在viewDidLoad方法 – user3832583

+0

奇怪它似乎没有自动完成,但实际上确实有效。 – user3832583

+0

我更新了答案。它正在工作! –