为什么我不能将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.
如果你看看我提供你会看到,在故事板,我可以刚落,另一个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);
我似乎无法使用addSubview在viewDidLoad方法 – user3832583
奇怪它似乎没有自动完成,但实际上确实有效。 – user3832583
我更新了答案。它正在工作! –