1最近自己给记搞了个新问题,一段文字是富文本,有很多的复杂的格式,大写,换行,加粗等等,所以必须用uiwenbview 上来加载html 文件来是这样的功能,但是效果要做的又要像用textview 的一样,即感觉是放在一个textview 上的,但是还有图片和视频,而且这个视频必须在必要的时候可以关掉,这样就想出了一个用uiwebview +uibutton +uiscrollview 来实现这样的功能。

2 问题是uiscrollview  是可以滚动的,uiwebview  也是要滚动的,当uiwebView 在uiscrollview 上面的时候 时不好滚动的,当不能完全显示自己的文字的时候交互特别的不好,所以要一下计算出uiwebview 的实际大小,然后设置其正确 的frame,在然后动态的改变uiscrollview 的contentsize  实现类似textview效果

3 难点是怎样计算要加载的html 文件的大小,研究会发现uiwebview 是有个代理的

- (void)webViewDidFinishLoad:(UIWebView *)webView

可以在加载成功数据之后在里面判断html  的高度和宽度,然后调整uiwebview 的大小

那么怎样获得这个大小呢,改变大小的时机找到了,最关键的问题又回来了。

4uiwebView 的布局结构

它的上面会放一个UIWebDocumentView 我们可以获得这个的大小,然后将它传回,在设置uiwebView 的大小 frame;

下面贴一段代码吧

  1. - (void)webViewDidFinishLoad:(UIWebView *)webView 
  2.         CGFloat webViewHeight = 0.0f; 
  3.         if (webView.subviews.count > 0)  
  4.         { 
  5.             UIView *scrollerView = [webView.subviews objectAtIndex:0];//为什么要取第一个? 
  6.             if (scrollerView.subviews.count > 0)  
  7.             { 
  8.                 UIView *webDocView = scrollerView.subviews.lastObject; 
  9.                 if ([webDocView isKindOfClass:[NSClassFromString(@"UIWebDocumentView") class]]) 
  10.                 { 
  11.                     webViewHeight = webDocView.frame.size.height;//获取文档的高度 
  12.                     webView.framewebDocView.frame; //更新UIWebView 的高度 
  13.                     aScrollView.contentSize=CGSizeMake(485, 240+webViewHeight);//调整底层的contensize 的大小 
  14.                 } 
  15.             } 
  16.         } 

记得在头文件里加入 <UIWebViewDelegate>,在设置  webView.delegate =self;

 

去了解控件的组织架构,必要的时刻也是很又用的 。