iOS - UIWebView加載數據和高度自適應

Url編碼解碼

        當url地址中包含有中文字符或其餘非標準的url字符時,須要對該url地址進行編碼NSString提供編碼和解碼方法html

        編碼:stringByAddingPercentEscapesUsingEncodingweb

NSString *urlString=[NSString stringWithFormat:@"http://www.xxxx.com/?param=%@",@"中文"];

urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        

        解碼:stringByReplacingPercentEscapesUsingEncoding編碼

NSString *urlStr = [@"xxx" stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];


UIWebView加載數據3種方法

1.- (void)loadRequest:(NSURLRequest *)request;lua

    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:request];

        直接加載url地址。url


2.- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;spa

        若是獲取到的是HTML字符串,能夠用這個方法加載。代理


3.- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;code

    NSURL *url = [NSURL URLWithString:urlString];
    NSData *data=[NSData dataWithContentsOfURL:url];
    [self.webView loadData:data MIMEType:@"text/html" textEncodingName:@"GBK" baseURL:nil];

        編碼格式有GB23十二、GBK、UTF-8等許多種,當url地址的編碼格式比較特殊時,能夠用這個方法加載。orm


WebVIew高度自適應

1.實現下面的事件方法能使WebView大小高度自適應:htm

        遵照協議UIWebViewDelegate,設置代理self.webView.delegate=self;

實現- (void)webViewDidFinishLoad:(UIWebView *)webView事件方法

- (void)webViewDidFinishLoad:(UIWebView *)webView     //網頁加載完成的時候調用
{  
    CGRect frame = webView.frame;
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    webView.frame = frame;
}

        此方法獲得的webView自適應的高度是固定的,若是顯示的HTML的高度超過webView的高度,則以屏幕滾動的方式顯示。


2.若是想讓webView的高度等於顯示的HTML的實際高度,即顯示的HTML有多高,webVIew的高度就有多高,則使用如下方法:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSInteger height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] integerValue];
    self.webView.frame=CGRectMake(0, 0, self.view.frame.size.width,height);
}

        stringByEvaluatingJavaScriptFromString能夠實現UIWebView與JavaScript之間的交互,很方便的操做UIWebview中的頁面元素

        雖然這個方法能使webView高度爲顯示的HTML實際高度,但效果並非太好,當高度超出屏幕時,沒法滾動下拉。


3.若要在webVIew的高度爲實際HTML的高度的狀況下實現滾動,可綜合兩種方法,將webView放置於一個合適大小的scrollView上,便可實現:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    CGRect frame = webView.frame;
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    webView.frame = frame;

    NSInteger height = [[webView stringByEvaluatingJavaScriptFromString:
    @"document.body.scrollHeight"] integerValue];
    
    self.scrollView.contentSize=CGSizeMake(self.view.frame.size.width, height);

    [self.scrollView addSubview:self.webView];
}

另,如下三段代碼效果基本相同:

[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"];

[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"];

[webView stringByEvaluatingJavaScriptFromString:@"document.body.clientHeight"];

相關文章
相關標籤/搜索