使用方向Xcode 9+的更改更新自定义子视图(uiview或Web视图)的框架/大小

时间:2018-06-27 11:48:43

标签: swift uiview uikit

如何更新子视图/网络视图的框架或大小-通过编程方式创建并添加到还包含导航栏的父视图中。 更改方向时,父视图会调整大小,但子视图不会调整大小。

我在viewdidload()中有此代码:

myView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

1)如果该应用默认在横向模式下启动,则使用此代码。子视图高度在两个方向上都会失真。

2)如果默认情况下以纵向模式启动应用,则此代码可以在以后更改为任何方向时正常工作。

在解决第一种情况时,请提出一些想法。 预先感谢。

2 个答案:

答案 0 :(得分:1)

如果您使用的是自动版式,我建议您使用尺寸类来处理此类更改。由于这是一个很大的概念,因此我无法在此处进行解释,但是如果您想对它有更多的了解,请观看wwdc 2017的this视频

答案 1 :(得分:0)

这是我想将自定义Web视图添加为子视图的方法:

1)在Main.storyboard中,添加导航栏,然后赋予以下约束并创建出口:

enter image description here

2)在这里,我有2种以编程方式使用约束的方法

  • 第一种方式:
application/json
  • 第二种方式
import UIKit
import WebKit
class TestConstraintsViewController: UIViewController, WKUIDelegate {
        @IBOutlet weak var myNavigationBar: UINavigationBar!
        var webView: WKWebView!
        var webConfiguration: WKWebViewConfiguration!

        override func loadView() {
            super.loadView()
            webConfiguration = WKWebViewConfiguration()

            webView = WKWebView(frame: self.view.frame, configuration: webConfiguration)
            webView.uiDelegate = self
            webView.translatesAutoresizingMaskIntoConstraints = false

            self.view.addSubview(webView)
        }

        override func viewDidLoad() {
            super.viewDidLoad()
            let myURL = URL(string: "https://www.stackoverflow.com")
            let myRequest = URLRequest(url: myURL!)
            webView.load(myRequest)

            //for leading trailing
            NSLayoutConstraint.activate([
                webView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
                webView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
                ])

            //for top/bottom layout
            if #available(iOS 11, *) {
                let safeLayoutGuide = self.view.safeAreaLayoutGuide
                NSLayoutConstraint.activate([
                    webView.topAnchor.constraint(equalToSystemSpacingBelow: myNavigationBar.bottomAnchor, multiplier: 1.0),
                    safeLayoutGuide.bottomAnchor.constraint(equalToSystemSpacingBelow: webView.bottomAnchor, multiplier: 1.0)
                    ])
            } else {
                let standardSpacing: CGFloat = 0.0
                NSLayoutConstraint.activate([
                    webView.topAnchor.constraint(equalTo: myNavigationBar.bottomAnchor, constant: standardSpacing),
                    bottomLayoutGuide.topAnchor.constraint(equalTo: webView.bottomAnchor, constant: standardSpacing)
                    ])
            }
        }

        @IBAction func dismissView(_ sender: Any) {
            self.dismiss(animated: true, completion: nil)
        }
}