UITableView Cell中的UIWebView - WebView无法填充表格单元格

时间:2014-06-23 05:23:22

标签: ios xcode uitableview uiwebview

我有一个表视图,其中包含一个嵌入了UIWebView的静态单元格。静态单元格位于第一个也是唯一一个区域,是tableview中的第二个静态单元格。我试图根据我传递给loadHTMLString方法的HTML动态更改UIWebView和UITableViewCell的大小。代码如下。

在viewDidLoad中:

[self.wbvArticle loadHTMLString:result baseURL:nil];
[self.wbvArticle setDelegate:self];
[self.wbvArticle.scrollView setScrollEnabled:NO];
[self.wbvArticle.scrollView setBounces:NO];

还有以下内容:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath     *)indexPath
{
    if (indexPath.row == 1)
    {
        return contentHeightForCell;
    }
    else return 282;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    contentHeightForCell = [[self.wbvArticle stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] floatValue];

    CGRect rect = self.wbvArticle.frame;
    rect.size.height = contentHeightForCell;
    self.wbvArticle.frame = rect;
    [self.wbvArticle sizeToFit];

    [self.tableView beginUpdates];
    [self.tableView endUpdates];
}

当我在模拟器中运行它时,表格单元格的大小正确,但webview不是。有没有人看到任何与众不同的东西?我已经搜索了网络和stackoverflow,但一直无法找到任何解决方法。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

您需要计算webview的高度并使用此新高度重新加载表格。

1)在@interface部分

中创建局部变量
float webViewHeight;

2)然后在tableView

cellForRowAtIndexPath中指定此高度
[webView setFrame:CGRectMake(0, 0, CELL_CONTENT_WIDTH, webViewHeight)];

3)同时在tableview的heightForRowAtIndexPath中设置高度

if (indexPath.row == 0) {
    return webViewHeight;
}

4)最后计算高度并重新加载tableview

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
    CGRect frame = aWebView.frame;
    frame.size.height = 1;
    aWebView.frame = frame;
    CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    aWebView.frame = frame;
    webViewHeight = fittingSize.height;
    [self.tableView reloadData];
}

答案 1 :(得分:2)

或者,您可以使用

#pragma mark - WebView Delegate
- (void)webViewDidFinishLoad:(UIWebView *)webView {
    self.webViewHeight = webView.scrollView.contentSize.height;
    [self.tableView reloadData];
}