获取UIWebview的高度4种方法

第一:效果的对比

   

第二、代码区

/*

   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 = <NSArray: 0x618000054760>; layer = <CALayer: 0x61800003ff40>; 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] (

         "<UIWebBrowserView: 0x7fbc8980ee00; frame = (0 0; 355 439); text = ' \n\U56fd\U6709\U80cc\U666f \U5b9e\U529b\U4fdd\U969c\n\U8d85\U5f3a\U6297\U98ce\U9669\U80fd\U529b\n \n\U4e13\U4e1a\U7684...'; gestureRecognizers = <NSArray: 0x608000059410>; layer = <UIWebLayer: 0x61800002c680>>",

         "<UIImageView: 0x7fbc8b10d680; frame = (3 194.5; 349 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x6000000309a0>> - (null)",

         "<UIImageView: 0x7fbc8b10edf0; frame = (349.5 3; 2.5 194); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x600000030ba0>> - (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、一个网页的层次图


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值