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;
下面貼一段代碼吧
- - (void)webViewDidFinishLoad:(UIWebView *)webView
- {
- CGFloat webViewHeight = 0.0f;
- if (webView.subviews.count > 0)
- {
- UIView *scrollerView = [webView.subviews objectAtIndex:0];//爲什麼要取第一個?
- if (scrollerView.subviews.count > 0)
- {
- UIView *webDocView = scrollerView.subviews.lastObject;
- if ([webDocView isKindOfClass:[NSClassFromString(@"UIWebDocumentView") class]])
- {
- webViewHeight = webDocView.frame.size.height;//獲取文檔的高度
- webView.frame= webDocView.frame; //更新UIWebView 的高度
- aScrollView.contentSize=CGSizeMake(485, 240+webViewHeight);//調整底層的contensize 的大小
- }
- }
- }
- }
記得在頭文件里加入 <UIWebViewDelegate>,在設置 webView.delegate =self;
去了解控件的組織架構,必要的時刻也是很又用的 。