??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();"];