【问题标题】:Set Constraints for ViewController presented为呈现的 ViewController 设置约束
【发布时间】:2019-03-28 12:28:46
【问题描述】:

我正在将一个 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
    }

【问题讨论】:

  • 你不能把它放在状态栏上。您可以从此视图或整个应用程序中完全删除状态栏(有很多关于如何执行此操作的互联网资源)或相应地创建第二个 VC。
  • 你把它放在状态栏上。最好保留状态栏来创建第二个View Controller

标签: ios swift uiviewcontroller autolayout constraints


【解决方案1】:

根据苹果文档:

布局指南,代表视图中未被条形和其他内容遮挡的部分。

更改导航栏顶部锚点:

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 
}

【讨论】:

    【解决方案2】:
    webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多