iOS中UIWebView網(wǎng)頁加載組件的基礎(chǔ)及使用技巧實例
基本用法示例
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIWebView * webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 20, ScreenWidth, ScreenHeight-20)];
// 自動隊頁面進行縮放以適應(yīng)屏幕
webView.scalesPageToFit = YES;
webView.userInteractionEnabled = YES;
webView.opaque = YES;
[self.view addSubview:webView];
NSURL * url = [NSURL URLWithString:@"http://www.youku.com"];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
// NSString * myHT = @"優(yōu)酷";
// [webView loadHTMLString:myHT baseURL:url];
/*
[webView goBack]; // 返回
[webView goForward]; // 前往
[webView reload];
[webView stopLoading];
*/
webView.delegate = self;
//移除滾動后的外邊陰影
UIScrollView *scrollView = webView.scrollView;
for (int i = 0; i < scrollView.subviews.count ; i++) {
UIView *view = [scrollView.subviews objectAtIndex:i];
if ([view isKindOfClass:[UIImageView class]]) {
view.hidden = YES ;
}
}
}
#pragma mark - UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
/**
* typedef NS_ENUM(NSInteger, UIWebViewNavigationType) {
* UIWebViewNavigationTypeLinkClicked,
* UIWebViewNavigationTypeFormSubmitted,
* UIWebViewNavigationTypeBackForward,
* UIWebViewNavigationTypeReload,
* UIWebViewNavigationTypeFormResubmitted,
* UIWebViewNavigationTypeOther
};
*/
NSLOG_FUNCTION;
return YES;
}
// 開始加載
- (void)webViewDidStartLoad:(UIWebView *)webView{
NSLOG_FUNCTION;
}
// 完成加載
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSLOG_FUNCTION;
}
// 加載失敗,彈出錯誤提示
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
UIAlertView *alterview = [[UIAlertView alloc] initWithTitle:@"" message:[error localizedDescription]
delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alterview show];
[alterview release];
NSLOG_FUNCTION;
}
以下是關(guān)于它的一些使用技巧:
1.讓網(wǎng)頁適應(yīng)手機屏幕寬度
如果用UIWebView顯示一些pc站的網(wǎng)頁,會發(fā)現(xiàn)網(wǎng)頁會超出屏幕,顯得很不好看,這時可以在webViewDidFinishLoad這個代理里面通過js添加一個meta:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *meta = [NSString stringWithFormat:@"document.getElementsByName(\"viewport\")[0].content = \"width=%f, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\"", IPHONE_WIDTH];
[webView stringByEvaluatingJavaScriptFromString:meta];
}
注意:使用這個方法時要把UIWebView的scalesPageToFit設(shè)成NO
webView.scalesPageToFit = NO;
2.為網(wǎng)頁中的圖片添加點擊事件,當(dāng)點擊圖片時放大查看
思路是給每一個img標(biāo)簽添加onclick事件,在事件中把img的src屬性封裝成一個特殊的url,然后進行攔截
如果是通過loadHTMLString去加載網(wǎng)頁的話,可以執(zhí)行下面一句進行替換:
html = [html stringByReplacingOccurrencesOfString:@"<img " withString:@"<img onclick=\"window.location.href=('http://src.'+this.src);\" "];
如果是通過loadRequest,那就要再webViewDidFinishLoad中執(zhí)行以下JS:
NSString *js = @"var imgs = document.getElementsByTagName(\"img\");"
"for(var i=0;i<imgs.length;i++){"
" var img = imgs[i];"
" img.onclick=function(){window.location.href=('http://src.'+this.src);}"
"}";
[webView stringByEvaluatingJavaScriptFromString:js];
然后通過webview的代理方法去攔截,拿到圖片的url,之后就可以做各種處理了
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *url = request.URL.absoluteString;
if ([url hasPrefix:@"http://src."])
{
url = [url stringByReplacingOccurrencesOfString:@"http://src." withString:@""];
// Do something..
return NO;
}
return YES;
}
3.為UIWebView添加一個跟隨網(wǎng)頁滾動的頁頭
UIWebView里包含一個scrollview,可以向scrollview里添加一個頁頭以達到跟隨網(wǎng)頁滾動的效果
CGFloat headerHeight = 36.0f; // 注意:y坐標(biāo)必須是負(fù)數(shù),IPHONE_WIDTH是屏幕寬度 UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, -headerHeight, IPHONE_WIDTH, headerHeight)]; [_webView.scrollView addSubview:_headerView]; // 修改webView的scrollView的contentInset,讓頂部留出一點空間 UIEdgeInsets edgeInset = _webView.scrollView.contentInset; _webView.scrollView.contentInset = UIEdgeInsetsMake(headerView.frameHeight, edgeInset.left, edgeInset.bottom, edgeInset.right);
相關(guān)文章
iOS overFullScreen與fullScreen區(qū)別分析
這篇文章主要介紹了iOS overFullScreen與fullScreen區(qū)別分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
iOS應(yīng)用開發(fā)中使用NSLocale類實現(xiàn)對象信息的本地化
這篇文章主要介紹了iOS應(yīng)用開發(fā)中使用NSLocale類實現(xiàn)對象信息的本地化的方法,能夠?qū)r間和貨幣等格式化為與系統(tǒng)本地設(shè)置相同的偏好,需要的朋友可以參考下2016-05-05
詳解iOS應(yīng)用開發(fā)中autoresizing尺寸自動適應(yīng)屬性的用法
這篇文章主要介紹了iOS應(yīng)用開發(fā)中autoresizing尺寸自動適應(yīng)屬性的用法,文中講解了使用代碼和Storyboard兩種方式調(diào)節(jié)autoresizing的方法,示例代碼為Objective-C,需要的朋友可以參考下2016-03-03
IOS用AFN發(fā)送字符串形式的Json數(shù)據(jù)給服務(wù)器實例
本篇文章主要介紹了IOS用AFN發(fā)送字符串形式的Json數(shù)據(jù)給服務(wù)器實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04
iOS 使用Moya網(wǎng)絡(luò)請求的實現(xiàn)方法
這篇文章主要介紹了iOS 使用Moya網(wǎng)絡(luò)請求的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07

