Iphone webViewDidFinishLoad之前的索引路径中的行高度

Iphone webViewDidFinishLoad之前的索引路径中的行高度,iphone,uitableview,uiwebview,Iphone,Uitableview,Uiwebview,我需要在表视图的单元格中加载HTML。我使用UIWebView而不是UILabel来解释html标记。 网络视图的大小不同,所以我要 - (void)webViewDidFinishLoad:(UIWebView *)webView { [webView sizeToFit]; } 以便正确设置webview的大小。但是,我还需要定义单元格的高度,我计划将其设置在内部 - (CGFloat)tableView:(UITableView *)tableView heightForRowAt

我需要在表视图的单元格中加载HTML。我使用UIWebView而不是UILabel来解释html标记。 网络视图的大小不同,所以我要

- (void)webViewDidFinishLoad:(UIWebView *)webView {
   [webView sizeToFit];
}
以便正确设置webview的大小。但是,我还需要定义单元格的高度,我计划将其设置在内部

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
}
不幸的是,heightforrowatinexpath是在webViewDidFinishLoad之前调用的,因此我无法正确定义单元格的高度

对我的问题有什么建议吗?我发现了一个关于这个的老问题,但它对我没有帮助:

谢谢


Adriana

当webview完成加载时,请告诉tableview重新加载其数据-这将再次询问单元格的高度:)

首次加载表视图时,请使用web视图的默认高度并显示加载/请等待消息

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

应在web视图完成加载后保存行高,然后刷新表:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [webView sizeToFit];
    self.rowHeight = webView.bounds.size.height;
    [tableView reloadData];
}
您可以通过以下方式更新
tableView:heightforrowatinexpath:
方法:

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

不过,您应该为类定义一个
CGFloat rowHeight
属性。

我找到了解决问题的方法。我需要在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];
}

它工作起来很快

查看此帖子重新思考您的设计-将UIWebView放在UITableView中通常是一个坏主意,原因有很多,包括:-直到太晚才知道视图的高度才算好(UITableView需要在显示之前知道,UIWebView在加载完所有内容后才能知道)那么我应该用什么来代替UIWebView呢?我需要显示HTML。我同意7KV7,你至少应该尝试用不同的方法来思考。我怀疑你的html是一个典型的公共网页,因为你把它们放在表格单元格中。这看起来更像是一种情况,你可能对html有一些控制权,否则它将永远无法工作。你能解析这个html并用它来构建单元格吗?这里有很多猜测-这取决于html,它是谁/如何控制的,等等。UIWebView真的很重。很可能它不会很好地滚动。
- (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];
}