Reputation: 81
I have a problem with setting the height of an UIWebView
dynamically. The webview loads a product description which contains html. I want the UIWebView
to change its height based on the contents of the description. The parent scrollview should also change its height, but then based on the height of the UIWebView
.
Can anyone explain to me how I can achieve the desired behavior of my views?
This is my view hierarchy:
Upvotes: 7
Views: 13268
Reputation: 5301
You have to add some code in the delegate method of UIWebView named webViewDidFinishLoad. Here is what you can do:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
CGRect frame = webView.frame;
frame.size.height = 1;
webView.frame = frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
webView.frame = frame;
NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);
yourScrollView.contentSize = webView.bounds.size;
}
The same thing can also be achieved using javascript to find the right height which is as follow:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
CGRect oldBounds = [[self webView] bounds];
CGFloat height = [[webView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
NSLog(@"NEW HEIGHT %f", height);
[webView setBounds:CGRectMake(oldBounds.origin.x, oldBounds.origin.y, oldBounds.size.width, height)];
yourScrollView.contentSize = webView.bounds.size;
}
Hope it helps!
Upvotes: 9
Reputation: 4607
I actually had the same problem recently and ended up figuring it out and putting together a sample project on github.
Upvotes: 5
Reputation: 723
You can set a constant height constraint on your WebView and change that dynamically once you calculate the height from the response.
Also constraint between a child view and a parent view can be achieved by this method in NSLayoutConstraint
+ (id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c
Upvotes: 0