2013-04-04 67 views
4

我在这些单元格的每一个里面都有几个自定义单元格和web视图。现在,我的要求是查找要在web视图上加载的HTML字符串的高度,然后基于此更改Custom cell高度和webview高度。在加载之前查找UIWebview的内容高度

我知道该文件的高度可以在-webViewDidFinishLoading委托中找到,但在我的应用程序中,我在这些单元格中有很多单元格和webviews,所以我觉得应用程序在滚动时会变慢,做不必要的回调

目前我正在这样做,这给了我的字符串高度。

-(float)getDynemicHeight:(NSString *)pstrText 
    { 
     CGSize constraint = CGSizeMake(683,600); 

     CGSize size = [pstrText sizeWithFont:[UIFont systemFontOfSize:18] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; 

     CGFloat height = MAX(size.height, 44.0f); 

     if (height>400) { 
      return 400; 
     } 

     return height; 
    } 

然而,这会导致一个问题,因为即使<div>元素被视为字符串,因此返回

+0

是您使用webviews显示带格式文本的原因吗? – KDaker 2013-04-04 04:35:57

+0

是的,我有一个html字符串。 – Mani 2013-04-04 04:42:03

+0

看看[RTLabel](https://github.com/honcheng/RTLabel)我们在我们的应用中使用它。 – KDaker 2013-04-04 05:16:22

回答

2

高度的值越大,在iOS 6中,如果你只是想显示样式文本(不与图片中的文字混入或类似的东西),你可能想使用NSAttributedString而不是一个Web视图。它允许您在不同的文本段落中创建不同样式的文本,段落边缘等。它的度量标准很好地定义,并附带测量方法。简单的UIView子类(如UILabel)现在可以显示一个属性字符串。或者你可以自己画直接进入界面。

http://www.apeth.com/iOSBook/ch23.html#_attributed_strings

如果你不能做到这一点,那么你想要做什么基本上是不可能的。您不知道Web视图如何在绘制复杂的HTML片段之前绘制出一段复杂的HTML。你只需要改变你的应用程序的体系结构。例如,您可以提前绘制所有Web视图,以便在table-dataSource时间内获得所需的信息。

+0

感谢您的信息。我也看过NSAttributed Strings和UITextView,再加上Paul Hegarty的斯坦福教程,但不幸的是我的应用需要支持5.0。因此,我最终在Web视图本身中实现了RTF功能。 – Mani 2013-04-04 05:04:42

+1

我害怕可能是这样的...... :( – matt 2013-04-04 05:06:02