有關(guān)web view的知識小結(jié)

??UIWebView是iOS內(nèi)置的瀏覽器控件,可以瀏覽網(wǎng)頁、打開文檔等 能夠加載html/htm、pdf、docx、txt等格式的文件.

一、UIWebView的加載方法

1.通過URL加載

NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.superqq.com"]];

[self.view addSubview:webView];

[webView loadRequest:request];

2.加載本地資源

NSString *path = [[NSBundle mainBundle] pathForResource:@"demodemo" ofType:@"html"];

NSURL* url = [NSURL? fileURLWithPath:path];//創(chuàng)建URL

NSURLRequest* request = [NSURLRequest requestWithURL:url];//創(chuàng)建NSURLRequest

[webView loadRequest:request];//加載

3.通過NSString加載

NSString *path = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"html"];

NSString *htmlString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

[webView loadHTMLString:htmlString baseURL:[NSURL URLWithString:path]];

二、代理以及代理方法

//設(shè)置代理

webView.delegate = self;

//代理方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

{

//返回YES,進行加載。通過UIWebViewNavigationType可以得到請求發(fā)起的原因

return YES;

}

- (void)webViewDidStartLoad:(UIWebView *)webView

{

//開始加載,可以加上風火輪(也叫菊花)

}

- (void)webViewDidFinishLoad:(UIWebView *)webView

{

//完成加載

}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

{

//加載出錯

}

三、UIWebView的常用的小方法

1.設(shè)置自動檢測電話

設(shè)置這個屬性,如果在加載的網(wǎng)頁中遇到電話號碼,直接單擊就可以撥打。

webView.dataDetectorTypes = UIDataDetectorTypePhoneNumber;//自動檢測網(wǎng)頁上的電話號碼,單擊可以撥打

2.加載等待界面?

? ? 在加載網(wǎng)頁的時候,可能會有一段的等待時間,顯示在屏幕上就是空白的,非常不好看,這個時候就可以考慮加一個加載的界面。在webViewDidStartLoad中加入。

- (void) webViewDidStartLoad:(UIWebView *)webView

{

//創(chuàng)建UIActivityIndicatorView背底半透明View

UIView?*view?=?[[UIView?alloc]?initWithFrame:CGRectMake(0,?0,?320,?480)];

[view?setTag:108];

[view?setBackgroundColor:[UIColor?blackColor]];

[view?setAlpha:0.5];

[self.view?addSubview:view];

activityIndicator?=?[[UIActivityIndicatorView?alloc]?initWithFrame:CGRectMake(0.0f,?0.0f,?32.0f,?32.0f)];

[activityIndicator?setCenter:view.center];

[activityIndicator?setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite];

[view?addSubview:activityIndicator];

[activityIndicator?startAnimating];

}

加載完成或失敗時,去掉loading效果

- (void) webViewDidFinishLoad:(UIWebView *)webView

{

[activityIndicator?stopAnimating];

UIView?*view?=?(UIView*)[self.view?viewWithTag:108];

[view?removeFromSuperview];

NSLog(@"webViewDidFinishLoad");

}

-?(void)?webView:(UIWebView?*)webView?didFailLoadWithError:(NSError?*)error

{

[activityIndicator?stopAnimating];

UIView?*view?=?(UIView*)[self.view?viewWithTag:108];

[view?removeFromSuperview];

}


3.UIWebView 的自適應(yīng)高度

方法一:獲取webview中scrovllview的content size進行設(shè)置

-(void)webViewDidFinishLoad:(UIWebView *)webView{

CGFloat webViewHeight=[webView.scrollView contentSize].height;

CGRect newFrame = webView.frame;

newFrame.size.height = webViewHeight;

webView.frame = newFrame;

}

方法二:執(zhí)行js語句 直接獲取html文檔的dom高度


-(void)webViewDidFinishLoad:(UIWebView *)webView{

CGFloat webViewHeight= [[webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"]floatValue];

// CGFloat webViewHeight= [[webView stringByEvaluatingJavaScriptFromString: @"document.body.scrollHeight"]floatValue];

CGRect newFrame = webView.frame;

newFrame.size.height = webViewHeight;

webView.frame = newFrame;

}

方法三:先將UIWebView的高度設(shè)為最小,然后再使用sizeThatFits就會返回剛好合適的大小

-(void)webViewDidFinishLoad:(UIWebView *)webView{

CGSize actualSize = [webView sizeThatFits:CGSizeZero];

CGRect newFrame = webView.frame;

newFrame.size.height = actualSize.height;

webView.frame = newFrame;

}

方法4.遍歷webview子視圖 獲取UIWebDocumentView高度即實際高度

-(void)webViewDidFinishLoad:(UIWebView *)webView{

CGFloat webViewHeight = 0.0f;

if ([webView.subviews count] > 0)

{

UIView *scrollerView = webView.subviews[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 的高度

}

}

}

}

4.設(shè)置webview 中字體的大小

在webViewDidFinishLoad做設(shè)置

[webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '300%'"];//修改百分比即可

5.讓web view中的圖片自適應(yīng)屏幕的寬度

在webViewDidFinishLoad做設(shè)置

NSString *js=@"var script = document.createElement('script');"? ? "script.type = 'text/javascript';"? ? "script.text = \"function ResizeImages() { "? ? "var myimg,oldwidth;"? ? "var maxwidth = %f;"? ? "for(i=0;imaxwidth){"

"oldwidth = myimg.width;"

"myimg.width = %f;"

"}"

"}"

"}\";"

"document.getElementsByTagName('head')[0].appendChild(script);";

js=[NSString stringWithFormat:js,[UIScreen mainScreen].bounds.size.width,[UIScreen mainScreen].bounds.size.width-15];

[webView stringByEvaluatingJavaScriptFromString:js];

[webView stringByEvaluatingJavaScriptFromString:@"ResizeImages();"];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容