第一:效果的对比
第二、代码区
/*
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 对象,我们通过获取 webView的ScrollvIew的内容的高度来获取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 =
)
*/
if ([webView subviews].count >0) {
/* 获取最后一个div*/
UIScrollView * WebViewLastView = [[webView subviews] lastObject];
NSLog(@"%@",[WebViewLastView subviews]);
/*
输出内容:
2016-10-08 14:36:47.795 获取UIWebview的高度[2473:1255283] (
"
"
"
)
*/
/* 下面有两个方法*/
/*****************************************************/
/*
/- 第一个 -/
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