2011-05-10 58 views
3

我需要在表視圖的單元格中加載HTML。我使用的是UIWebView而不是UILabel,以便解析html標籤。 web視圖的大小不同,所以我在做webViewDidFinishLoad之前的heightForRowAtIndexPath

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    [webView sizeToFit]; 
} 

從而使網頁流量的大小設置正確。但是,我還需要定義單元格的高度,這我正打算設置裏面

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
} 

不幸的是,heightForRowAtIndexPath被webViewDidFinishLoad之前調用,所以我不能夠正確定義單元格的高度。

對我的問題有什麼建議嗎?我發現這個一個老問題,但它並沒有幫助我:How to determine UIWebView height based on content, within a variable height UITableView?

感謝,

阿德里安娜

+0

檢查這個帖子http://stackoverflow.com/questions/2814994/uiwebview-inside-a-uitableviewcell – visakh7 2011-05-10 12:15:35

+1

重新考慮你的設計 - 把一個UIWebView一個UITableView內通常是爲一些原因,包括一個壞主意: - 不能直觀地告訴視圖的高度,直到太晚才能顯示出來(UITableView在顯示之前需要知道,UIWebView在加載完畢後才能知道) – visakh7 2011-05-10 12:17:27

+0

然後我應該用什麼來代替UIWebView的?我需要顯示HTML。 – Adriana 2011-05-10 12:22:25

回答

3

我找到了解決我的問題的方法。我需要一個網頁視圖在的tableview結束,所以我做了以下內容:

- (void)viewWillAppear:(BOOL)animated { 

    CGRect frame = CGRectMake(10, 0, 280, 400); 
    webView = [[UIWebView alloc] initWithFrame:frame]; 
    self.webView.delegate = self; 
    webView.hidden = YES; 

    //It removes the extra lines from the tableview. 
    [self.tableView setTableFooterView:self.webView]; 
    ... 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    [webView sizeToFit]; 
    [webView setBounds:CGRectMake(webView.bounds.origin.x, webView.bounds.origin.y, webView.bounds.size.width+20, webView.bounds.size.height)]; 
    self.webView.hidden = NO; 
    [self.tableView setTableFooterView:webView]; 
    ... 
    [webView release]; 
} 

它的工作原理,它的快!

+0

這個解決方案適用於我的問題完美:) – Koolala 2012-05-11 00:16:19

0

當你的WebView已經finshed加載,告訴你的tableview重新加載它的數據 - 這會詢問細胞的高度再次:)

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    [webView sizeToFit]; 
    [tableView reloadData]; 
} 

第一次您的表視圖負荷,使用默認高度的Web視圖,並顯示一個裝載/請稍候消息?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (webViewIsLoaded) { 
     return [webView bounds[.size.height; 
    } else { 
     return 50; 
    } 
} 
0

您應該保存行的高度時,Web視圖完成加載,那麼你刷新表:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    [webView sizeToFit]; 
    self.rowHeight = webView.bounds.size.height; 
    [tableView reloadData]; 
} 

,並更新tableView:heightForRowAtIndexPath:方法是這樣的:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return self.rowHeight ? self.rowHeight : 50; 
} 

你儘管如此,應該爲你的班級定義一個CGFloat rowHeight屬性。

相關問題