這段時間寫的項目中,有涉及到根據後端上傳的表單內容,然後在移動端將內容排版重新展示的功能點,所以小小的寫一下解決辦法。
首先如果直接進行內容展示,或者進行sizeToFit的操作,那麼可能會造成圖片超過螢幕大小,字型變得很小的結果,所以這裡用到了UIWebView的delegate方法和添加了html的標籤語言,使用了javascript操作方法。具體可以研究代碼,如下:
//web-(UIWebView *)detailWebView{ if (_detailWebView == nil) { _detailWebView = [UIWebView new]; _detailWebView.delegate = self; _detailWebView.scrollView.bounces = NO; _detailWebView.scrollView.showsHorizontalScrollIndicator = NO; _detailWebView.scrollView.scrollEnabled = NO; _detailWebView.dataDetectorTypes = UIDataDetectorTypeAll; [_detailWebView sizeToFit]; } return _detailWebView;}
NSString *htmlcontent = [NSString stringWithFormat:@"<head><style>img{max-width:%fpx !important;}</style></head><div id=\"webview_content_wrapper\">%@</div>",f_Device_w-30,detailDic[@"content"]]; [_detailWebView loadHTMLString:htmlcontent baseURL:nil];
#pragma mark ----- webView 的 delegate- (void)webViewDidFinishLoad:(UIWebView *)webView{ //擷取頁面高度(像素) NSString * clientheight_str = [webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"]; float clientheight = [clientheight_str floatValue]; //設定到WebView上 webView.frame = CGRectMake(15, _whereNewsLabel.bottom+10, f_Device_w-30, clientheight); //下面這樣寫就是擷取到比較準確的內容高度,不需要再進行其他計算了 //擷取內容實際高度(像素) NSString * height_str= [webView stringByEvaluatingJavaScriptFromString: @"document.getElementById('webview_content_wrapper').offsetHeight + parseInt(window.getComputedStyle(document.getElementsByTagName('body')[0]).getPropertyValue('margin-top')) + parseInt(window.getComputedStyle(document.getElementsByTagName('body')[0]).getPropertyValue('margin-bottom'))"]; float height = [height_str floatValue]; //再次設定WebView高度(點) webView.frame = CGRectMake(15, _whereNewsLabel.bottom+10, f_Device_w-30, height); if ([self.delegate respondsToSelector:@selector(backWebViewWithHeight:)]) { [self.delegate backWebViewWithHeight:webView.bottom+5]; }}
有寫代碼是我項目中使用的,沒有必要用,大家可以根據自己的需要修改,必要的代碼上面都有,有問題可以留言,不喜勿噴,謝謝。