根据子WebView iOS增加单元格高度

时间:2016-01-20 11:02:19

标签: ios uitableview uiwebview cell

我在UITableViewCell中有一个UIWebView,它加载一个HTML字符串。我已经使这个UIWebview根据其中的数据获取完整的高度。现在我还想将Cell高度增加到webview的高度。

我尝试过这样的事情: -

 public override void LoadingFinished(UIWebView webView)
            {
                if (!webView.IsLoading)
                {

                    var contentSize = ContentWebView.ScrollView.ContentSize;
                    contentSize.Height = UIScreen.MainScreen.Bounds.Height;
                    ContentWebView.ScrollView.ContentSize = contentSize;

                    CGRect newFrame = TableHeader.Frame;
                    newFrame.Height = newFrame.Size.Height + contentSize.Height;

                    CellContentView.Frame = newFrame;


                }
            }

我该怎么做?

2 个答案:

答案 0 :(得分:0)

默认情况下,您必须返回一些默认高度。加载Web视图后,仅重新加载该特定单元格(使用tableview reloadRowsAtIndexPaths方法)。可以使用代码

计算Web视图的内容高度
[[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight;"] floatValue]

在Web视图的webViewDidFinishLoad委托方法中调用上面的代码。

你的tableview委托方法看起来像:

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    if //while Web view is loading
    return //default Height
    else
    return //calculated Height in webViewDidFinishLoad method.
}

答案 1 :(得分:0)

一旦你有在web视图中呈现的字符串,请使用以下方法调用以下方法获取该字符串呈现所需的高度,

- (CGSize)getHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font {
CGSize size = CGSizeZero;
if (text) {
    CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font } context:nil];
    size = CGSizeMake(frame.size.width, frame.size.height+20.0f);
}
return size;
}

heightForRowAtIndexpath方法更新为

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

return [self getHeightForText:[self.valuesArray objectAtIndex:indexPath.row] havingWidth:323.0f andFont:[UIFont fontWithName:@"Helvetica" size:18.0f]].height;
}

在上述方法中,您还可以通过编写一些if条件来检查Web视图内容字符串的可用性。如果内容尚不可用,则返回该单元格的44.0f标准高度。

一旦Web视图的内容可用,请通过传递单元格的索引路径来调用tableview的以下方法。

    [self.tableView reloadRowsAtIndexPaths:@[iPath] withRowAnimation:UITableViewRowAnimationNone];