wkwebview 下移20像素_2018 自适应WKWebView高度

ArticalDetailCell.m

//

// ArticalDetailCell.m

// BlockChainNews

//

// Created by zsm on 2018/5/30.

// Copyright © 2018年 XinHuoKeJi. All rights reserved.

//

#import "ArticalDetailCell.h"

@interface ArticalDetailCell()

@property (weak, nonatomic) IBOutlet UILabel *titileLab;

@property (weak, nonatomic) IBOutlet UILabel *timeLab;

@end

@implementation ArticalDetailCell

- (void)awakeFromNib {

[super awakeFromNib];

// Initialization code

self.selectionStyle = UITableViewCellSelectionStyleNone;

self.myWebView.backgroundColor = [UIColor clearColor];

self.myWebView.scrollView.scrollEnabled = NO;

[self.myWebView setUserInteractionEnabled:NO];//是否支持交互

[self.myWebView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];

self.myWebView.navigationDelegate = self;

self.myWebView.UIDelegate = self;

}

#pragma mark - WKNavigationDelegate

/* 页面开始加载 */

- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{

// [SVProgressHUD show];

}

/* 开始返回内容 */

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{

}

/* 页面加载完成 */

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{

[SVProgressHUD dismiss];

if (webView.isLoading) {

return;

}

__block CGFloat webViewHeight=0;

//获取内容实际高度(像素)@"document.getElementById(\"content\").offsetHeight;"

[webView evaluateJavaScript:@"document.body.offsetHeight" completionHandler:^(id _Nullable result,NSError * _Nullable error) {

// 此处js字符串采用scrollHeight而不是offsetHeight是因为后者并获取不到高度,看参考资料说是对于加载html字符串的情况下使用后者可以,但如果是和我一样直接加载原站内容使用前者更合适

//获取页面高度,并重置webview的frame

webViewHeight = [result floatValue];

NSLog(@"%f",webViewHeight);

if (self.webViewHeightChanged) {

self.webViewHeightChanged(webViewHeight);

}

}];

// [webView evaluateJavaScript:@"document.body.offsetHeight" completionHandler:^(id _Nullable clientheight_str, NSError * _Nullable error) {

// float clientheight = [clientheight_str floatValue];

// webView.frame = CGRectMake(15, 10, kScreenWidth - 30, clientheight);

//

// [webView evaluateJavaScript:@"" completionHandler:^(id _Nullable, NSError * _Nullable error) {

//

// }];

// }];

// NSString * clientheight_str = [webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"];

// float clientheight = [clientheight_str floatValue];

// //设置到WebView上

// webView.frame = CGRectMake(15, 10, kScreenWidth - 30, clientheight);

//

//

// //下面这样写就是获取到比较准确的内容高度,不需要再进行其他计算了

// //获取内容实际高度(像素)

// NSString * height_str= [webView stringByEvaluatingJavaScriptFromString: @"document.getElementById('webview_content_wrapper').offsetHeight + parseInt(window.getComputedStyle(document.getElementsByTagName('body')[0]).getPropertyValue('margin-top')) + parseInt(window.getComputedStyle(document.getElementsByTagName('body')[0]).getPropertyValue('margin-bottom'))"];

// float height = [height_str floatValue];

// //再次设置WebView高度(点)

// webView.frame = CGRectMake(15, 10, kScreenWidth - 30, height);

//

// //下面这两行是去掉不必要的webview效果的(选中,放大镜)

// [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitUserSelect='none';"];

//

// [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';"];

}

/* 页面加载失败 */

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation{

[[UIApplication sharedApplication].delegate.window makeToast:@"页面加载失败" duration:1.0 position:CSToastPositionCenter];

[SVProgressHUD dismiss];

}

/* 在发送请求之前,决定是否跳转 */

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{

//允许跳转

decisionHandler(WKNavigationActionPolicyAllow);

//不允许跳转

//decisionHandler(WKNavigationActionPolicyCancel);

}

/* 在收到响应后,决定是否跳转 */

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{

NSLog(@"%@",navigationResponse.response.URL.absoluteString);

//允许跳转

decisionHandler(WKNavigationResponsePolicyAllow);

//不允许跳转

//decisionHandler(WKNavigationResponsePolicyCancel);

}

//监听方法

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

if ([keyPath isEqualToString:@"contentSize"]) {

CGSize fitSize = [_myWebView sizeThatFits:CGSizeZero];

// NSLog(@"webview fitSize:%@",NSStringFromCGSize(fitSize));

CGRect rect = self.myWebView.frame;

rect.size.width = fitSize.width;

rect.size.height = fitSize.height;

self.myWebView.frame = rect;

}

}

- (void)setModel:(TypeDetailModel *)model{

self.titileLab.text = model.title;

self.timeLab.text = [NSString stringWithFormat:@"发布日期:%@",[ToolUtil getTimeWithStamp:model.update_time]];

NSString *result = [NSString stringWithFormat:@"

NSString*contentStr = model.content;

contentStr = [contentStr stringByReplacingOccurrencesOfString:@"

NSString *htmlStr = [NSString stringWithFormat:@"

%@
", contentStr];

//修改图片大小

NSString *re_imgSize = [NSString stringWithFormat:@"

",kScreenWidth - 60];

NSString *htmlcontent = [NSString stringWithFormat:@"

%@
%@",kScreenWidth-30,htmlStr,re_imgSize];

[self.myWebView loadHTMLString:htmlcontent baseURL:nil];

}

//-(void)layoutSubviews

//{

// [super layoutSubviews];

//}

//这里别忘了在dealloc理移除监听

- (void)dealloc {

NSLog(@"webView ---------dealloc");

[self.myWebView.scrollView removeObserver:self

forKeyPath:@"contentSize" context:nil];

}

@end

ArticalDetailCell.h

//

// ArticalDetailCell.h

// BlockChainNews

//

// Created by zsm on 2018/5/30.

// Copyright © 2018年 XinHuoKeJi. All rights reserved.

//

#import

#import "TypeDetailModel.h"

#import "UIWebView+isLoading.h"

#import "MyWK.h"

typedef void(^WebViewHeightChangedBlock)(float height);

@interface ArticalDetailCell : UITableViewCell

@property (weak, nonatomic) IBOutlet MyWK *myWebView;

//@property (weak, nonatomic) IBOutlet UIWebView *webView;

@property (nonatomic, strong) TypeDetailModel *model;

@property (nonatomic, strong) WebViewHeightChangedBlock webViewHeightChanged;

@end

视图控制器中使用

//MARK:-- 适配iOS10 加载wkwebview 底部留白 计算高度不准确

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

if (self.tableView == scrollView) {

for (UIView *cell in self.tableView.visibleCells) {

if ([cell isKindOfClass:[ArticalDetailCell class]]) {

[((ArticalDetailCell *)cell).myWebView setNeedsLayout];

}

}

}

}

cellForRow中使用

ArticalDetailCell * cell = [tableView dequeueReusableCellWithIdentifier:reuseid forIndexPath:indexPath];

if (self.model) {

[cell setModel:self.model];

cell.webViewHeightChanged = ^(float height){

//MARK:--计算webview高度

BOOL needReload = NO;

if(self.webViewHeight == 0 ) needReload=YES;

self.webViewHeight = height + 30;

if (needReload) {

// needReload = NO;

[self.tableView reloadData];

DLog(@"callback --------webViewheight %d",height);

}

};

}

return cell;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值