I've been looking around and wasnt able to see any swift related ways to do this. I'm trying to get my UIWebViews height to be dynamic. I have a UIWebView that loads data using the loadHtmlString function.The thing is that I am loading the data from an sqlite database, each time I load a different string with different length and naturally the web view obtains different height.
Now I need to know how to make the UIWebView that exact height in order to load my next content right under the webView. This is what I have so far
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)
I found something like this on SO but not sure how to link it to the UIWebView
's frame:
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
}
Best Answer
This post has been updated for Swift 5 &
WKWebView
So this is a really great function you wrote there, OP!
Here is just a shorter, more elegant version of your code:
Migrating to
WKWebView
1) import
WebKit
2) make your
ViewController
inherit fromWKNavigationDelegate
3) hook up the
WKWebView
’s delegate:webView.navigationDelegate = self
4) implement the following protocol function:
After migrating from
UIWebView
toWKWebView
, above approach doesn’t seem to work anymore.What you can do instead, is change the line with
webView.sizeThatFits(CGSize.zero)
to:The full code for
WKWebView
would then be: