Ios 在UITableViewCell中使用UIWebView显示动态内容

Ios 在UITableViewCell中使用UIWebView显示动态内容,ios,uitableview,uiwebview,Ios,Uitableview,Uiwebview,我需要在表格视图单元格中显示具有不同样式和颜色的不可编辑文本。在研究中,UIWebView似乎是实现我想要的样式/颜色灵活性的方法。以下是我所做的:注意iOS5,XCode 4 创建了从UITableViewCell派生的WebViewTableViewCell类。该类包含UIWebView。 在序列图像板中,我创建了带有一个包含UIWebView对象的动态单元原型的表视图控制器。该单元格的类型为WebViewTableViewCell。我在UIWebView类和故事板之间建立了连接。 在表视图

我需要在表格视图单元格中显示具有不同样式和颜色的不可编辑文本。在研究中,UIWebView似乎是实现我想要的样式/颜色灵活性的方法。以下是我所做的:注意iOS5,XCode 4

创建了从UITableViewCell派生的WebViewTableViewCell类。该类包含UIWebView。 在序列图像板中,我创建了带有一个包含UIWebView对象的动态单元原型的表视图控制器。该单元格的类型为WebViewTableViewCell。我在UIWebView类和故事板之间建立了连接。 在表视图控制器代码中,将HeightForRowatineXpath重写,并使用sizeThatFits动态调整单元格高度 当我运行时,所有这些都可以工作,除了单元格不会调整大小以适应web视图中包含的所有文本。事实上,它们根本不会调整大小;它们是故事板中绘制的高度。以下是一些示例代码:

cellForRowAtIndexPath:

  UITableViewCell *cell = nil;
  WebViewTableViewCell *webCell = (WebViewTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"cellid"];
  // Now populate the cell with dynamic data
  NSDictionary *thisData = [self.dynamicData objectAtIndex:indexPath.row];
  NSString *myString= [NSString stringWithFormat:@"%@.  %@",
                          [thisData objectForKey:@"key1"],
                          [thisData objectForKey:@"key2"]];
  [webCell.webView loadHTMLString:myStringbaseURL:nil];
  cell = webCell;
  return cell;
ROWATINDEXPATH的高度:

    WebViewTableViewCell *webCell = (WebViewTableViewCell *) [self tableView:a_tableView cellForRowAtIndexPath:indexPath];
    // Now that we have the cell, let it determine what its height should be.
    CGFloat rowHeight = 45; // default unless if a problem accessing the cell
    if( webCell )
    {
      CGSize size = [webCell.webView sizeThatFits:CGSizeZero];
      rowHeight = rowHeight < size.height ? size.height : rowHeight;
    }
还有一件事-单元格虽然高度不正确,但可以滚动。我想让他们有一个固定的高度,而不是滚动

有什么想法吗

-约翰


是一种更好的自定义tableview方法

要禁用滚动,只需设置tableView.scrollEnabled=NO。要获得正确的高度,可以将视图控制器设置为webview代理,并执行以下操作:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSString *result = [webView stringByEvaluatingJavaScriptFromString:@"var height = 0; for (var i=0; i < document.all.length; i++) { document.all[i].height; if (document.all[i].height > height) { height = document.all[i].height; } }"];
    CGFloat height  = [result floatValue];
}
我很抱歉使用了大量JavaScript,但我认为它会起作用。但是,我建议您使用支持NSAttributedString的内置UILabel,或者如果您支持6之前的iOS版本,则使用开源UILabel子类