精確計算UIWebView內容的高度
蒐集了網上各大部落格以及技術論壇,能夠獲取UIWebView的內容高度有以下兩個方法,相關程式碼如下:
方法一:
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
//再設定高度
CGRect frame = webView.frame;
frame.size.height = 1;
webView.frame = frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
frame.origin = CGPointMake(0, frame.origin.y);
//frame.size.height就是內容高度了
}
方法二:
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
CGFloat webViewHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"] floatValue];
CGRect frame = webView.frame;
frame.size.height = webViewHeight;
webView.frame = frame;
}
然而,筆者在使用以上兩種方法的時候,都出現了第一次使用UIWebView的時候,高度算得不準的情況(基本上都是少一點),使得出現UIWebView中的文字被截斷的情況。原因是:viewDidFinishLoad
方法只是在記憶體中載入完了html程式碼,然而並沒有渲染到UIWebView上面去,所以重新渲染後的真實高度和viewDidFinishLoad
所獲取的高度有一定的偏差,所以我們應該在UIWebView渲染完後,再獲取高度,這時候才是最精確的。
其中JavaScript中有一個方法,可以在UIWebView渲染完畢html後執行,相關程式碼如下:
window.onload = function() {
//code
}
window.onload
方法會在UIWebView渲染之後呼叫,所以我們可以在這個裡面寫一個url請求,把高度帶過去,然後在UIWebView的代理方法webView:shouldStartLoadWithRequest:navigationType:
中攔截這個請求,獲取高度,這時候獲取的高度就是準確的了,JavaScript程式碼如下:
window.onload = function() {
window.location.href = "ready://" + document.body.scrollHeight;
}
代理方法程式碼如下:
- (BOOL)webView:(UIWebView*)webView
shouldStartLoadWithRequest:(NSURLRequest*)request
navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = [request URL];
if (navigationType == UIWebViewNavigationTypeOther) {
if ([[url scheme] isEqualToString:@"ready"]) {
float contentHeight = [[url host] floatValue];
CGRect fr = webview.frame;
fr.size = CGSizeMake(webview.frame.size.width, contentHeight);
webview.frame = fr;
return NO;
}
}
return YES;
}
PS:你可以把JavaScript程式碼放在你的html程式碼的前面或者後面
相關推薦
精確計算UIWebView內容的高度
蒐集了網上各大部落格以及技術論壇,能夠獲取UIWebView的內容高度有以下兩個方法,相關程式碼如下: 方法一: -(void)webViewDidFinishLoad:(UIWebView *)webView { //再設定高度 CGR
iOS計算UIWebView的高度和iOS8之後的WKWebView的高度問題
當我們涉及到webView和純程式碼結合的時候,例如一個資訊詳情,其它位置想加上我們的純程式碼控制元件,可以計算出webView的高度,然後放到scrollView上,然後在scrollView下邊或者什麼位置,加上自己的純程式碼內容就行了. 下邊是計算UIWebVi
iOS 計算 UIWebView 的高度的問題
當我們涉及到webView和純程式碼結合的時候,例如一個資訊詳情,其它位置想加上我們的純程式碼控制元件,可以計算出webView的高度,然後放到scrollView上,然後在scrollView下邊或者什麼位置,加上自己的純程式碼內容就行了. 下邊是計算webView的高度
親測!最方便的計算UIWebView的高度和iOS8之後的WKWebView的高度方法
UIWebView的高度計算方法:float webViewHeight = [[webView stringByEvaluatingJavaScriptFromString:
計算 UIWebView 的內容高度
- (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *height_str= [webView stringByEvaluatingJavaScriptFromString: @"do
iOS: 計算 UIWebView 的內容高度
先是 html 檔案內容 // index.html <html> <body> <div id="content" contenteditable="false" style="font-family: Helvetica"> <
計算UIWebView載入網頁的內容高度
計算高度我們總會遇到計算不準確的情況,而且載入網頁的時候儘量避免在block內部載入。至於為什麼暫時沒有找到完整的答案。 計算高度 無非就是在UIWebView的載入完成的代理裡面實現 有時候會出現計算偏差的問題 ,可以酌情加入迴圈獲取。將獲取的最新高度
使用boundingRectWithSize計算內容高度的
NSDictionary *attributes = @{NSFontAttributeName:[UIFontsystemFontOfSize:16]}; CGRect comm_conte
iOS7,iOS8,iOS9 UIWebView獲取內容高度終極解決方案
場景 在 App 中載入網頁時,通常情況我們只需要直接初始化一個 WebView,然後去載入對應的 URL 即可,但若是有時候有些個設計是需要將 web 與原生的 UI 搭載在一起,一般情況下,webView 的 內容一頁是肯定不夠的,換句話說,webView 的高度是
IOS計算UIWebView的實際高度
UIWebView*_detailWebView=[[UIWebViewalloc]initWithFrame:CGRectMake(0,0, 320, 480)]; _detailWebV
JavaScirpt精確計算
ava blog rip math 計算 cti logs nbsp var JavaScript精確加法 function accAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split("."
IOS7中動態計算UILable的高度
content tof 送別 lds %d bre 內心 大學生活 hsi .h文件 #import <UIKit/UIKit.h> @interface UILabel (ContentSize) - (CGSize)contentSize;
js獲取窗口滾動條高度、窗口可視範圍高度、文檔實際內容高度、滾動條離瀏覽器底部的高度
onscroll style pre span 文檔 log ner ons cti 1.獲取窗口可視範圍的高度 1 //獲取窗口可視範圍的高度 2 function getClientHeight(){ 3 var clientHeight=0;
iOS 【野路子】獲取WKWebView內容高度做H5原生連接
select cti ats 獲取頁面高度 attr cell 模式 posit length 前言:是這樣的,剛寫完上一篇文章還沒緩過神來,上一篇文章我還提到了,想和大家聊聊原生+H5如何無縫連接的故事.結果我朋友就給我發了兩篇他的作品.他的做法也都有獨到之處.好的文章都
基於Masonry自己主動計算cell的高度
markdown tracking 高度 ebo message cti nstimer timer uitable /** * This is a very
java根據生日精確計算年齡
dmi hda 日歷 tac day cat format oid trace 1 package getAge; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import
JS根據身份證號碼精確計算年齡和性別
def user col .get || info fin ret 得到 1 /** 2 * 根據身份證號得到姓別和精確計算年齡 3 */ 4 function analyzeIDCard(IDCard){ 5 var sexAndAge = {};
js的精確計算
//加法函式,用來得到精確的加法結果 //javascript的加法結果會有誤差,在兩個浮點數相加的時候會比較明顯。這個函式返回較為精確的加法結果。 function accAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toStrin
js精確計算
轉自:https://www.cnblogs.com/yadongliang/p/9067333.html 大多數語言在處理浮點數的時候都會遇到精度問題,但是在JS裡似乎特別嚴重,來看一個例子
使用計算類BigDecimal寫一個精確計算工具類
在日常開放當中需要我們計算數字,利率。通常Java的做法是使用Math相關的API。但是,這樣做是不夠精確的,由於float和double不能進行計算,如果強行進行計算會使得計算不準確。造成難以挽回的損失。為了彌補這一個缺點Java提供了BigDecimal這個類來解決。在使用這個類的時候需要將do