Ok, so che questa domanda è stata posta e posta. Ci sono molti buoni suggerimenti, ma non riesco a farlo funzionare come previsto. Sto cercando di creare una cella tableview in grado di impostare dinamicamente la sua altezza sul carico in base a diversi html. Quello che tutti suggeriscono è usare il seguente metodo.Determina l'altezza di UIWebView in base al contenuto locale dinamico, all'interno di un'altezza variabile. TableViewCell
-(void)webViewDidFinishLoad:(UIWebView *)webView
Dicono per calcolare l'altezza sia utilizzando JavaScript come di seguito:
NSString *output = [webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];
o fare qualcosa di simile (ho creato questo):
self.webView = webView;
CGRect frame = webView.frame;
frame.size.height = 1;
webView.frame = frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
webView.frame = frame;
Entrambi questi metodi restituiscono il altezza corretta della webview, ma avvengono dopo l'inizializzazione della tableview. Questo webViewDidFinishLoad viene chiamato dopo il metodo heightForRowAtIndexPath. Quindi, quando il tavolo è in costruzione, non ho l'altezza della cella. Quindi tutti dicono bene, quindi basta fare una tableview per ricaricarsi all'interno del tuo webViewDidFinishLoad che funziona ancora, ma non mi piace perché c'è un ritardo e rende lo scrolling del tableview choppy quando arrivi a quella parte. Come posso risolvere questo? E renderlo liscio? Stavo pensando di determinare in qualche modo l'altezza della webview prima di caricare la vista, ma non sono sicuro di come lo farei. Ho anche provato a convertire l'html in una stringa di testo semplice, ma questo si traduce in un'altezza falsa perché l'html ha spazi e cose mentre il testo normale non lo fa. Qualsiasi aiuto sarebbe apprezzato!
Puoi caricare la visualizzazione Web off-screen abbastanza presto in modo che sia probabile che sia finito prima heightForRowAtIndexPath viene chiamato? Inoltre, hai determinato la natura del ritardo e del choppiness? Forse quel problema può essere risolto. –
Ottima idea! Questo è quello che ho finito per fare. – mikemike396