获取UIWebview的高度4种方法

第一:效果的对比

获取UIWebview的高度4种方法_第1张图片获取UIWebview的高度4种方法_第2张图片   

第二、代码区

/*

   UIWebView IOS开发常用的类。它简单好用,使用它,开发者不用写太多的代码。但是,App开发中,获取webview的高度成为开发者必备的知识。我知道网上也有好多方法。我这里是做一个评价,不是新的东西。如有雷同请包涵。

 */

//  ViewController.m

//  获取UIWebview的高度4种方法

//

//  Created by MAC on 16/10/8.

//  Copyright © 2016 NetworkCode小贱. All rights reserved.

//


#import "ViewController.h"

#import "testViewController.h"


const NSString * BaseIpString = @"http://testapi.anyitou.com";

@interface ViewController ()<UIWebViewDelegate>{

    UIWebView * ReloadWebView;

}

@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    /* 我们要UIWebview 的高度只适应*/

    CGFloat ScreenWeight = [UIScreen mainScreen].bounds.size.width;

    CGFloat ScreenHeight = [UIScreen mainScreen].bounds.size.height;

    UIWebView * WebView = [[UIWebView alloc]initWithFrame:CGRectMake(10, 60, ScreenWeight-20, 200)];

    WebView.delegate = self;

    /* 关闭webView的反弹*/

    WebView.scrollView.bounces = NO;

    ReloadWebView = WebView;

    [self.view addSubview:WebView];

    NSString * WebviewUrl = [NSString stringWithFormat:@"%@/resources/Indexintroduce",BaseIpString];

    NSURLRequest * RequestUrl = [NSURLRequest requestWithURL:[NSURL URLWithString:WebviewUrl]];

    [WebView loadRequest:RequestUrl];

    

    /* 测试按钮*/

    UIButton * Button = [UIButton buttonWithType:UIButtonTypeCustom];

    Button.frame = CGRectMake(10, ScreenHeight-50, ScreenWeight-20, 40);

    Button.backgroundColor = [UIColor magentaColor];

    [Button setTitle:@"刷新" forState:UIControlStateNormal];

    [Button addTarget:self action:@selector(BunClick) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:Button];

    // Do any additional setup after loading the view, typically from a nib.

}

#pragma mark -- btn 的点击事件

-(void)BunClick{

    [ReloadWebView reload];

    //testViewController * test = [[testViewController alloc]init];

   // [self presentViewController:test animated:YES completion:Nil];

}

#pragma mark ---webview 的代理

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

    /* 网页的开始加载*/

    NSLog(@"开始");

}

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

    /* 网页的加载完成*/

    /* 在网页加载完成时,修改网页的高度,来达到适配*/

    /* 第一种*/

    // [self firstAutoHeight:webView];

    /* 第二种*/

    // [self secondAutoHeight:webView];

    /* 第三种*/

    //[self threeAutoHeight:webView];

    /* 第四种*/

    [self fourAutoHeight:webView];

}

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

    /* 网页的加载失败*/

}

/* 是否允许网页的加载*/

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

    return YES;

}

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

    /* 网页是含有UIScrollview 对象,我们通过获取 webViewScrollvIew的内容的高度来获取webView的高度,同事达到高度适配*/

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

    /* 获取网页现有的frame*/

    CGRect WebViewRect = webView.frame;

    /* 改版WebView的高度*/

    WebViewRect.size.height = WebViewHeight;

    /* 重新设置网页的frame*/

    webView.frame = WebViewRect;

}

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

    /* UIWebView 的大小先设置为0 ,然后,使用sizeThatFits 获取webview的高度*/

    CGSize WebViewSize = [webView sizeThatFits:CGSizeZero];

    /* 获取网页现有的frame*/

    CGRect WebViewRect = webView.frame;

    /* 设置高度*/

    WebViewRect.size.height = WebViewSize.height;

    webView.frame = WebViewRect;

    /*

        或者:

            [webView sizeToFit];

            CGRect WebViewRect = webView.frame;

            webView.frame = WebViewRect;

     */

}

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

    /* 可取的js:

     1@"document.body.scrollHeight" (为主)

     2@"window.screen.height" 要求高度不能超过屏幕高度。

     */

    /* 我们使用js 来获取网页的高度*/

    NSString * JsString = @"document.body.offsetHeight";

    CGFloat WebViewHeight = [[webView stringByEvaluatingJavaScriptFromString:JsString] floatValue];

    /* 获取网页现有的frame*/

    CGRect WebViewRect = webView.frame;

    /* 改版WebView的高度*/

    WebViewRect.size.height = WebViewHeight;

    /* 重新设置网页的frame*/

    webView.frame = WebViewRect;

}

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

    /* 设置新的高度*/

    CGFloat WebViewHeight = 0.0;

    /* 判断是否有内容存在*/

  //  NSLog(@"%@",[webView subviews]);

    /*

     2016-10-08 14:35:19.057 获取UIWebview的高度[2456:1247177] (

     "<_UIWebViewScrollView: 0x7ff84383b600; frame = (0 0; 355 200); clipsToBounds = YES; autoresize = H; gestureRecognizers = ; layer = ; contentOffset: {0, 0}; contentSize: {355, 439}>"

     )

     */

    if ([webView subviews].count >0) {

        /* 获取最后一个div*/

        UIScrollView * WebViewLastView = [[webView subviews] lastObject];

        NSLog(@"%@",[WebViewLastView subviews]);

        /*

           输出内容:

         2016-10-08 14:36:47.795 获取UIWebview的高度[2473:1255283] (

         "; layer = >",

         "> - (null)",

         "> - (null)"

         )

         */

        /* 下面有两个方法*/

        /*****************************************************/

        /* 

        /- 第一个 -/

        if ([WebViewLastView isKindOfClass:[NSClassFromString(@"_UIWebViewScrollView") class]]) {

            WebViewHeight = WebViewLastView.contentSize.height;

        }

        /- 获取网页现有的frame -/

        CGRect WebViewRect = webView.frame;

        /- 改版WebView的高度 -/

        WebViewRect.size.height = WebViewHeight;

        /- 重新设置网页的frame -/

        webView.frame = WebViewRect;

        */

        /*****************************************************/

        /* 第二种*/

        if ([WebViewLastView isKindOfClass:[NSClassFromString(@"_UIWebViewScrollView") class]]) {

            UIView * WebViewLastViewB = [WebViewLastView.subviews firstObject];

            if ([WebViewLastViewB isKindOfClass:[NSClassFromString(@"UIWebBrowserView") class]]) {

                WebViewHeight = WebViewLastViewB.frame.size.height;

            }

        }

        /* 获取网页现有的frame*/

        CGRect WebViewRect = webView.frame;

        /* 改版WebView的高度*/

        WebViewRect.size.height = WebViewHeight;

        /* 重新设置网页的frame*/

        webView.frame = WebViewRect;

    }

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



@end


3、一个网页的层次图

获取UIWebview的高度4种方法_第3张图片

你可能感兴趣的:(IOS,的基础类)