具有自动布局的UIWebView的动态高度

时间:2013-08-21 10:47:29

标签: iphone ios objective-c uiwebview

我有动态设置UIWebView高度的问题。 webview加载包含html的产品说明。我希望UIWebView根据描述内容更改其高度。父卷轴视图也应该更改其高度,然后根据UIWebView的高度。

任何人都可以向我解释如何实现我的观点所需的行为吗?

这是我的视图层次结构:

enter image description here

3 个答案:

答案 0 :(得分:9)

您必须在名为webViewDidFinishLoad的UIWebView的委托方法中添加一些代码。您可以这样做:

- (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; 
}

使用javascript查找正确的高度也可以实现同样的目的:

- (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;
}

希望它有所帮助!

答案 1 :(得分:5)

我最近遇到了同样的问题,最终搞清楚并在github上整理sample project

答案 2 :(得分:0)

您可以在WebView上设置恒定高度约束,并在从响应计算高度后动态更改。

在NSLayoutConstraint中,此方法也可以实现子视图和父视图之间的约束

+ (id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c