【问题标题】:UIWebView in UITableView Cell - WebView not filling Table CellUITableView 单元格中的 UIWebView - WebView 未填充表格单元格
【发布时间】:2014-06-23 05:23:21
【问题描述】:

我有一个表格视图,其中有一个嵌入了 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 不是。有没有人看到任何不寻常的东西?我已经搜索了 web 和 stackoverflow,但找不到任何可以修复它的东西。

感谢您的帮助。

【问题讨论】:

    标签: ios xcode uitableview uiwebview


    【解决方案1】:

    您需要计算 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];
    }
    

    【讨论】:

    • 谢谢,我知道我遗漏了什么。只是为了澄清-我正在使用带有静态单元格的 UITableView。这是运行 cellForRowAtIndexPath 的问题吗?
    • 我最终将其更改为动态单元格,这似乎有点矫枉过正。但它解决了问题。谢谢!
    • 仅供参考。如果您在 webViewDidFinishLoad: 中重新加载 tableview,它将陷入无限循环。由于table reload也会自己reload webView,所以webView加载完成后,又reload tableview,就这样一直走下去。所以你可能想设置某种标志或其他东西来处理它。
    • 这行不通。它进入无限循环。 @user1139921,你说得对,我们需要维护一个标志。
    【解决方案2】:

    或者,你可以使用

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

    【讨论】:

      猜你喜欢
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2010-11-12
      • 2018-04-14
      • 2017-10-31
      • 1970-01-01
      相关资源
      最近更新 更多