2011-11-29 10 views
10

UIWebViewに任意の長さのHTML文字列をロードしてからUITableViewCellに表示します。私はこのUIWebViewUITableViewから独立してスクロールさせたくないので、内容に合わせて高さを変更する必要があります。内容に合わせてUIWebViewの高さを変更する

このUITableViewCellも折りたたむことができ、折りたたまれた状態ではUIWebViewが表示されません。

こんにちは、私はheightForRowAtIndexPathを適切な値に戻して、表を正しくスクロールさせることができるように、この高さがどのようになっているかを知っていますか?

はここにいくつかのサンプルコードです:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
if (indexPath.row == 0) 
    return 286; 

if (indexPath.row == 1) { 
    if (analysisExpanded) 
     return analysisWebViewHeight + 39; 
    else 
     return 52; 
} 

if (sourcesExpanded) 
    return sourcesWebViewHeight + 39; 

return 53; 

}

非常にシンプル。 39は、私がwebviewでセル内に持っているヘッダの高さです。私は、私はviewForTagを呼んでいるのWebView取得するには、ペン先からのセルの「拡大図」をロードしています

 UIWebView* sourcesWebView = (UIWebView*)[cell viewWithTag:1]; 
     [sourcesWebView setBackgroundColor:[UIColor clearColor]]; 
     [sourcesWebView loadHTMLString:placeholder baseURL:[NSURL URLWithString:@"http://example.com/"]]; 
     sourcesWebViewHeight = [[sourcesWebView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"] floatValue]; 
     [sourcesWebView setFrame:CGRectMake(sourcesWebView.frame.origin.x, sourcesWebView.frame.origin.y, sourcesWebView.frame.size.width, sourcesWebViewHeight)]; 

sourcesWebViewHeightcellForRowAtIndexPathに上記のコードによって更新されるアイヴァーです。ユーザーがセルを3回タップし、展開崩壊拡張し、少しスクロールすると、最終的に正しい高さになります。

メモリのみのUIWebViewオブジェクトを使用して高さを「プリロード」しようとしましたが、何らかの理由で正しい数値が返されませんでした。あなたは次の行を使用する必要があるのiOSのSafariの場合

+0

アップル(UIWebViewドキュメント内)厳密にUITableViewでUIWebViewを使用しないように言った。 – makboney

+0

ウェブビューを持つ複数のアプリを問題なくセルとして公開しました。 – Denis

+0

同じ質問に対するより多くの、より良い回答がここにあります[1]。 [1]:http://stackoverflow.com/questions/3936041/how-to-determine-the-content-size-of-a-uiwebviewあなたは答えとしてこれを受け入れるべき –

答えて

2

NSInteger height = [[sourcesWebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] integerValue]; 

document.documentElement.scrollHeightは、このブラウザのために働いていません。

あなたのWebビューのロードが終了した後だけですべてが右であることを確認するために、あなたは=これを呼び出す必要があります)

UPDATE:だけiOS5をのために働く別のオプション、彼らはにscrollViewプロパティを追加しましたあなたはcontentSizeを得ることができるUIWebView。

5

問題は、Webビューでレンダリングする前にスクロールサイズを取得しようとしていたことでした。

didFinishLoadデリゲートメソッドを実装した後、私の元のjavascriptは高さを得るために正常に機能しました。 HTMLコードがロードされたときwebViewDelegateは、WebViewのの高さを得ることができますので、 tableview:heightForRowAtIndexPath:方法はのtableViewのセル内に位置するのWebViewを取得しようと のための無限ループに入ります

+1

、のために働きました私 – Fonix

1

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    float height; 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    UIWebView *webContent = (UIWebView *) [cell viewWithTag:tagTableSingleContentWeb]; 
    CGRect frame = webContent.frame; 

    height = frame.origin.y + frame.size.height + 30; 

    return height; 
} 

上記れますコード私はtableViewのセル内のWebViewにHTMLコードを挿入するとtableViewのセルを変更しようとしましたが、無限のループが発生します....

私はまだ他の方法を見つけようとしています。

p.s.WebViewDelegate WebViewがScrollViewにある場合はウェイが大丈夫ですが、TableViewセルの内部でそれを動作させる方法はありません。

+0

あなたは解決策を見つけましたか?私は同じ問題を抱えていますか? –

0

さらに多くの同じ質問に対するより良い答えは、hereと同様に見つけることができます。ちょうどそれが誰かに役立つかもしれないと思った。

関連する問題