我在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;
}
}
我该怎么做?
答案 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];