2011-11-29 111 views
10

我加載任意長度的HTML字符串轉換爲UIWebView,然後將其在一個UITableViewCell顯示。我不希望這個UIWebView獨立滾動UITableView,所以我必須調整其高度以適應內容。調整大小的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 web視圖:

 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)]; 

sourcesWebViewHeight是由上面的代碼中cellForRowAtIndexPath更新伊娃。如果用戶點擊三次,則展開 - 摺疊 - 展開,然後進行一些滾動,最終獲得正確的高度。

我嘗試「預加載」,高度使用內存只有UIWebView對象,但從來沒有出於某種原因返回正確的數字。

+0

Apple(在UIWebView文檔中)嚴格地說不要在UITableView中使用UIWebView。 – makboney

+0

我們已經發布了幾個應用程序和網絡視圖作爲單元沒有任何問題 – Denis

+0

同樣的問題的更多和更好的答案也可以在這裏找到[1]。 [1]:http://stackoverflow.com/questions/3936041/how-to-determine-the-content-size-of-a-uiwebview –

回答

2

對於iOS Safari瀏覽器,你需要使用下面的行:

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

document.documentElement.scrollHeight沒有爲這個瀏覽器的工作。

只是爲了確保一切是正確的,你需要你的Web視圖後打電話到該加載完畢=)

更新:另一種選擇,只會工作,對iOS5的,他們已經加入scrollView屬性UIWebView,在那裏你可以得到contentSize

5

問題是我試圖在Web視圖有機會呈現它之前獲取滾動大小。

執行didFinishLoad委託方法後,我的原始JavaScript工作得很好,以獲得高度。

+1

你應該接受這個的答案,工作了我 – Fonix

1

由於webViewDelegate可以得到webView的高度時加載HTML代碼, 的tableview:heightForRowAtIndexPath:方法將進入一個無限循環的 試圖檢索地處的tableView細胞web視圖:

- (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細胞當我插入HTML代碼到的tableView細胞內的web視圖,但它會導致無限循環....

我仍然在試圖找出一些其他的方式。

p.s.WebViewDelegate當webView位於ScrollView中時,方式是可以的,但我不知道如何使它在TableView單元格內工作。

+0

你有沒有找到解決方案?我有同樣的問題? –

0

對於幾乎相同的問題,更多和更好的答案可以找到here以及。只是認爲這可能對某人有幫助。

相關問題