2013-08-21 3 views
7

Ho riscontrato un problema con l'impostazione di un'altezza di UIWebView in modo dinamico. La webview carica una descrizione del prodotto che contiene html. Voglio che lo UIWebView cambi la sua altezza in base al contenuto della descrizione. Anche la scrollview genitore dovrebbe cambiare la sua altezza, ma in base all'altezza dello UIWebView.Altezza dinamica di UIWebView con layout automatico

Qualcuno può spiegarmi come posso ottenere il comportamento desiderato delle mie opinioni?

Questa è la mia visione della gerarchia:

enter image description here

+0

Possibile duplicato di http://stackoverflow.com/questions/10715524/calculate-uiwebview-height-depending-on-its-content ??? –

+0

verifica la mia risposta – AJ112

+0

Possibile duplicato di [Come determinare la dimensione del contenuto di un UIWebView?] (Http://stackoverflow.com/questions/3936041/how-to-determine-the-content-size-of-a-uiwebview) – Fattie

risposta

0

È possibile impostare un vincolo di altezza costante sul WebView e di cambiamento che in modo dinamico, una volta si calcola l'altezza dalla risposta.

vincolo anche tra una vista bambino e una vista genitore può essere raggiunto con questo metodo in NSLayoutConstraint

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

Ho un vincolo di altezza costante nella vista Web, come e dove posso modificare l'altezza? È nel metodo webviewdidfinishload? – ruhu

5

realtà ho avuto lo stesso problema di recente e ha finito per capire che fuori e mettere insieme un sample project su GitHub.

+0

Per la cronaca, ho cercato in alto e in basso per questo, e il tuo progetto è stato il miglior aiuto per risolvere tutti i vincoli del layout automatico. – tng

8

È necessario aggiungere del codice nel metodo delegato di UIWebView denominato webViewDidFinishLoad. Ecco cosa si può fare:

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

La stessa cosa può essere ottenuta anche utilizzando JavaScript per trovare la giusta altezza, che è la seguente:

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

Speranza che aiuta!

+1

Credito dovuto a [questa risposta] (http://stackoverflow.com/a/3937599/80425) –

+0

Ma estremamente impreciso. Il contenuto viene interrotto –

+0

Per ottenere risultati accurati, utilizzare observer per contentSize su webView.scrollView – Rajesh73