2017-04-05 13 views
0

以下は、私の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); 
    } 

答えて

3

あなたが制約を追加する前にviewwebViewを追加するのを忘れそうです:

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

私はviewDidLoadメソッドでaddSubviewを使用するように見えることはできません – user3832583

+0

奇妙なことに、自動完成していないようですが、実際にはうまくいきました。 – user3832583

+0

私は答えを更新しました。それは働いている! –

関連する問題