ios - 为什么我不能将在 viewDidLoad 方法中创建的 View 约束到 ViewControllers View ?

标签 ios swift uiviewcontroller nslayoutconstraint

以下是我在我的 ViewController 中初始化一个 UIView 然后将其约束到 ViewController 的主视图后收到的错误消息。

无法激活带有 anchor 的约束,因为它们没有共同的祖先。约束或其 anchor 是否引用不同 View 层次结构中的项目?这是非法的。

enter image description here

如果您查看我提供的图片,您会发现在 Storyboard 中我可以在主视图中放置另一个 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);

关于ios - 为什么我不能将在 viewDidLoad 方法中创建的 View 约束到 ViewControllers View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43219849/

相关文章:

ios - UITableViewController 不传递数据

ios - 有没有办法将 View 放置在表格 View 之上?

ios - 分段控制/文本字段/DidChange

swift - Xcode 10 的编译器看不到文件夹引用中的 Swift 文件中的类

ios - 当应用程序因调用移动接收而消失时如何暂停计时器?

swift - 即使在同一 Controller 中, socket 为零

ios - 如何在 ViewController 之间传递委托(delegate)

ios - NSData - 写入临时文件/目录

ios - UITableView 自定义单元格 IBOutlets 为零

ios - resultType 设置为 NSDictionaryResultType 的 NSFetchRequest 并保存更改的对象