如何在 swift 中设置 webview window 的大小?

How to set the size of a webview window in swift?

我是 Swift 编程的初学者,想在我的应用程序中添加一个 webView,但我无法正确设置此 view 的大小。目标是将这个 webView 放在屏幕的下三分之一(纵向模式),因此我尝试 storyboard 中的 webView window 看起来像那样并设置约束。

为了 webView 的编程,我参考了苹果开发者指南:https://developer.apple.com/documentation/webkit/wkwebview

问题是,每次我启动应用程序时,webView 只是全屏显示,而不是 storyboard 中的建模区域。

我想也许我可以修改

webView = WKWebView(frame: .zero, configuration: webConfiguration)

我尝试创建自定义框架,但没有任何效果,只能全屏显示。

有人可以告诉我如何使用 storyboard 的边界设置 webView window 吗?

我是否也应该使用 WKWindowFeatures class?

我真的搜索了几个小时并为此观看了很多 youtube 视频,但没有任何帮助。非常感谢任何帮助,谢谢。

UPDATE/Solution:

感谢评论里的大家!大家帮了我大忙!我尝试了不同的解决方案,有些从一开始就有效,有些则需要进一步研究。我 运行 陷入初学者错误,例如 Couldn’t instantiate class named WKWebViewThis Class is not Key Value Coding-Compliant for the Key。第一个我通过检查约束解决了,第二个通过在 Build phase Tab in General 中添加 WebKit Framework 解决了。 @AshishGupta 的解决方案最适合我。 solutionscreenshot

可以使用下面的代码来简单webView:图片会显示小webView.

import UIKit
import WebKit

class ViewController: UIViewController {

    @IBOutlet weak var wkwebView: WKWebView!
    override func viewDidLoad() {
        super.viewDidLoad() 
        // Do any additional setup after loading the view.

        let myURL = URL(string:"https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        wkwebView.load(myRequest)    
    }
}

首先,欢迎来到 Whosebug 和 iOS。

你的方法没有错。正确设置约束和设置自定义框架都应该可以正常工作。但是,Apple 开发人员文档中有非常微小的细节可能会弄乱一切。

在函数override func loadView()的末尾有这一行view = webView

这会丢弃到那时为止对 UIViewController 的视图 属性 所做的所有操作,并将其设置为 webView 对象。

删除该行应该可以解决所有问题。如果没有,请使用 webView 的故事板约束的屏幕截图更新您的问题。

您还应该将 webview 设置移到 loadView() 函数之外。可能到 viewDidLoad()viewWillAppear

干杯!

我需要添加 WKWebView 作为 subview 以使其可调整大小。

    var webView: WKWebView!
  
    override func viewDidLoad() {
        super.viewDidLoad()
        webView = WKWebView(frame: CGRect(x: 0, y: self.view.frame.height-500, width: self.view.frame.width, height: 500), configuration: WKWebViewConfiguration())

        self.view.addSubview(webView)
        let myURL = URL(string:"https://developer.apple.com/")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
        
    }

该代码生成如下内容:

希望对您有所帮助!

1. WKWebView 使用约束

假设你想固定 webView 的高度,你可以像这样以编程方式设置约束

只需从 storyBoard 获取 WebKit View 并创建您的 WebView 的出口

 @IBOutlet weak var webView: WKWebView!

然后像这样给 webView 设置约束

override func viewDidLoad() {
    super.viewDidLoad()
    webView!.translatesAutoresizingMaskIntoConstraints = false
    let leadingConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.leading, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.leading, multiplier: 1, constant: 30)
    let trailingConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: -30)
    let bottomConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: -30)
    let heightConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 350)
    view.addConstraints([trailingConstraint, leadingConstraint, bottomConstraint, heightConstraint])

//Leading = 30 from superview
//Trailing = 30 from superview
//Bottom = 30 from superview
//Equal height = 350

    let myURL = URL(string: "https://www.apple.com")
    let myRequest = URLRequest(url: myURL!)
    webView.load(myRequest)

}

2。 WKWebView 无约束

override func viewDidLoad() {
        super.viewDidLoad()
  let webView = WKWebView(frame: CGRect(x: 30, y: UIScreen.main.bounds.height-330, width: self.view.frame.width-60, height: 300))

        let myURL = URL(string: "https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
        view.addSubview(webView)
   }