一尘不染

UIWebView动态内容大小

swift

我一直在环顾四周,无法看到任何快速相关的方法来执行此操作。我试图让我的UIWebViews高度是动态的。我有一个UIWebView,它使用loadHtmlString函数加载数据。事实是,每次我加载具有不同长度的不同字符串时,都会从sqlite数据库加载数据,并且Web视图自然会获得不同的高度。
现在,我需要知道如何将UIWebView设置为正确的高度,以便将我的下一个内容加载到webView的正下方。这就是我到目前为止

var jobSkillView = UIWebView(frame: CGRectMake(-5, 480.0, screenWidth, 300.0))
jobSkillView.loadHTMLString("<html><body p style='font-family:arial;font-size:16px;'>" + jobSkills + "</body></html>", baseURL: nil)
jobSkillView.stringByEvaluatingJavaScriptFromString("document.body.innerHTML")
jobSkillView.scrollView.scrollEnabled = true
jobSkillView.scrollView.bounces = true
jobSkillView.sizeToFit()
border.addSubview(jobSkillView)

我在SO上找到了类似的内容,但不确定如何将其链接到UIWebView的框架:

func webViewDidFinishLoad(jobSkillView : UIWebView){
    // Change the height dynamically of the UIWebView to match the html content
    var jobSkillViewFrame: CGRect = jobSkillView.frame
    jobSkillViewFrame.size.height = 1
    jobSkillView.frame = jobSkillViewFrame
    var fittingSize: CGSize = (jobSkillView.sizeThatFits(CGSizeZero))
    jobSkillViewFrame.size = fittingSize
    // webViewFrame.size.width = 276; Making sure that the webView doesn't get wider than 276 px
    jobSkillView.frame = jobSkillViewFrame
    var jobSkillViewHeight = jobSkillView.frame.size.height
}

阅读 192

收藏
2020-07-07

共1个答案

一尘不染

这篇文章已针对Swift 5和更新WKWebView


因此,这是您在此处编写的一个非常出色的功能,OP!
这只是您的代码的简短,优雅的版本:

// make sure to declare the delegate when creating your webView (add UIWebViewDelegate to class declaration as well)
myWebView.delegate = self

func webViewDidFinishLoad(webView: UIWebView) {
     webView.frame.size.height = 1
     webView.frame.size = webView.sizeThatFits(CGSize.zero)
}

迁移至 WKWebView

1)导入WebKit
2)使您ViewController继承自WKNavigationDelegate
3)挂接WKWebView的委托:webView.navigationDelegate = self
4)实现以下协议功能:

webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)

从迁移UIWebView到后WKWebView,上述方法似乎不再起作用。
您可以做的是,将行更改webView.sizeThatFits(CGSize.zero)为:

webView.frame.size = webView.scrollView.contentSize

完整的代码WKWebView如下:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    webView.frame.size.height = 1
    webView.frame.size = webView.scrollView.contentSize
}
2020-07-07