2013-08-21 57 views
7

我动态设置UIWebView的高度时遇到问题。 webview加载一个包含html的产品描述。我希望UIWebView根据说明的内容更改其高度。父滚动视图也应该改变它的高度,但是然后基于UIWebView的高度。带自动布局的UIWebView的动态高度

任何人都可以向我解释我如何才能达到我的意见所需的行为?

这是我的看法层次:

enter image description here

+0

可能的重复http://stackoverflow.com/questions/10715524/calculate-uiwebview-height-depending-on-its-content ??? –

+0

检查我的答案 – AJ112

+0

[如何确定UIWebView的内容大小?](http://stackoverflow.com/questions/3936041/how-to-determine-the-content-size-of-a-uiwebview ) – Fattie

回答

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 
+0

我对webview有一个恒定的高度限制,我如何以及在哪里可以改变高度?是在webviewdidfinishload方法中? – ruhu

5

实现其实我最近有同样的问题,并最终计算出来,并在github上组建一个sample project

+0

为了记录,我对此进行了高低搜索,并且您的项目是获得所有自动布局约束的最佳帮助。 – tng

8

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

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

希望它能帮助:还可以使用JavaScript来找到合适的高度是如下实现

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

同样的事情!

+1

由于[此答案](http://stackoverflow.com/a/3937599/80425) –

+0

但非常不准确。我得到内容切断 –

+0

要获得准确的结果,请将contentSize的observer用于webView.scrollView – Rajesh73