7

我在动态设置高度时遇到问题UIWebView。webview 加载包含 html 的产品描述。我想UIWebView根据描述的内容改变它的高度。父滚动视图也应该改变它的高度,但是基于UIWebView.

谁能向我解释如何实现我的观点的预期行为?

这是我的视图层次结构:

在此处输入图像描述

4

3 回答 3

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

希望能帮助到你!

于 2013-11-19T19:46:51.847 回答
5

实际上,我最近遇到了同样的问题,最终解决了这个问题并在 github 上整理了一个示例项目。

于 2013-11-19T18:55:21.697 回答
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
于 2013-08-21T11:08:31.133 回答