为 ViewController 设置约束条件

Set Constraints for ViewController presented

我正在推动 ViewController 超过我目前的 ViewController。

我想推送的ViewController是一个WebView,不过我估计没关系。

我希望显示的 ViewController 不在状态栏下方。但是如何设置这些约束?

这是我加载推送的代码 ViewController:

@objc func loadWebView(sender: UIButton) {

        let vc = WebViewVC()

        webViewVC = vc

        self.present(webViewVC!, animated: true, completion: nil)

    }

如果我为 webViewVC.view 设置与父视图 ViewController 相关的约束,它当然会告诉我这是不允许的,因为视图位于不同的视图层次结构中。

这是我在 WebViewVC 中设置布局的方式:

func setUpView() {
        let view = UIView()
        self.view = view
        view.st(navigationBar,webView)

        navigationBar.heightAnchor.constraint(equalTo: webView.heightAnchor, multiplier: 0.1).isActive = true
        navigationBar.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
        navigationBar.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
        navigationBar.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
        navigationBar.bottomAnchor.constraint(equalTo: webView.topAnchor, constant: 0).isActive = true


        webView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
        webView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
        webView.topAnchor.constraint(equalTo: navigationBar.bottomAnchor, constant: 0).isActive = true
        webView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
    }

根据 Apple 文档:

The layout guide representing the portion of your view that is unobscured by bars and other content.

将您的导航栏顶部锚点更改为:

if #available(iOS 11, *) {
     let guide = view.safeAreaLayoutGuide
     navigationBar.topAnchor.constraint(equalTo: guide.topAnchor).isActive = true

} else {
     navigationBar.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true 
}
webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true

视图是您的 self.view 而不是创建的新视图 (view = UIView() )