Заданные ограничения для ViewController - PullRequest
0 голосов
/ 24 октября 2018

Я помещаю ViewController поверх моего текущего ViewController.

ViewController, который я хочу использовать, является WebView, но я думаю, это не имеет значения.

Screenshot of the pushed ViewController

Я хочу, чтобы представленный 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
    }

Ответы [ 2 ]

0 голосов
/ 24 октября 2018
webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true

, где представление является вашим self.view , а не созданным новым представлением (view = UIView ())

0 голосов
/ 24 октября 2018

Согласно Apple doc:

Руководство по макету, представляющее ту часть вашего представления, которая не скрыта столбцами и другим содержимым.

Изменение верхнего якоря панели навигациис:

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 
}
...