webViewDidFinishLoad之前的heightForRowAtIndexPath

时间:2011-05-10 12:09:15

标签: iphone uitableview uiwebview

我需要在表格视图的单元格中加载HTML。我正在使用UIWebView而不是UILabel,以便解释html标签。 WebView的大小不同,所以我正在做

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

这样就可以正确设置webview的大小。但是,我还需要定义单元格的高度,我打算在其中设置

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

不幸的是在webViewDidFinishLoad之前调用了heightForRowAtIndexPath,所以我无法正确定义单元格的高度。

对我的问题有任何建议吗?我发现了一个关于此问题的老问题,但它对我没有帮助:How to determine UIWebView height based on content, within a variable height UITableView?

谢谢,

阿德里安娜

3 个答案:

答案 0 :(得分:3)

我找到了解决问题的方法。我在tableview的末尾需要一个webview,所以我做了以下几点:

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

它有效且速度很快!

答案 1 :(得分:0)

当你的webview已经加载时,告诉你的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;
    }
}

答案 2 :(得分: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属性。