美文网首页
cell中嵌套UIWebView和WKWebView

cell中嵌套UIWebView和WKWebView

作者: YannChee | 来源:发表于2018-03-09 16:34 被阅读47次

最开始是Cell中嵌套UIWebView,但是当打开关闭不同网页重复很多次时,内存会不断增加,存在内存泄漏,后来改成cell中嵌套UIWebView和WKWebView

QYAwardInfoDescribeCell.h的代码:

#import <UIKit/UIKit.h>

@class QYAwardInfoModel;
@interface QYAwardInfoDescribeCell : UITableViewCell
//
@property (nonatomic,strong) QYAwardInfoModel *model;
//
//
@property (nonatomic,strong) void (^webViewFinishLoadBlock)(CGFloat webViewHeight);

@end

QYAwardInfoDescribeCell.m


#import "QYAwardInfoDescribeCell.h"
#import "QYAwardInfoModel.h"



@interface QYAwardInfoDescribeCell () <UIWebViewDelegate>
//
//@property (weak, nonatomic) IBOutlet UILabel *awardDescribeL;


@property (weak, nonatomic) UIWebView *webView;


@end

@implementation QYAwardInfoDescribeCell


#pragma mark - lifecycle
- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        //
        self.webView.delegate = self;
        [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.mas_equalTo(self.contentView);
        }];
    }
    return self;
}

#pragma mark - setModel
- (void)setModel:(QYAwardInfoModel *)model {
    _model = model;
    
    NSString *str = model.descriptionField;
    if (str.length > 0) {
        [self.webView loadHTMLString:str baseURL:nil];
    }
    
}

#pragma mark webView代理
- (void)webViewDidFinishLoad:(UIWebView *)webView {
    // 获取内容高度
    NSString *heightStr =  [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"];
    CGFloat height = [heightStr floatValue];
    //
    if (height != self.model.particularsWebViewHeight) {
        self.webViewFinishLoadBlock ? self.webViewFinishLoadBlock(height) : nil;
    }
    
}
   
#pragma mark - Properties' Getter & Setter
- (UIWebView *)webView {
    if (!_webView) {
        UIWebView *webView = [[UIWebView alloc] init];
        webView.scrollView.showsHorizontalScrollIndicator = NO;
        webView.scrollView.showsVerticalScrollIndicator = NO;
        webView.scrollView.scrollEnabled = NO;
        //
        webView.backgroundColor = [UIColor whiteColor];
        webView.opaque = NO;
        //
        _webView = webView;
         [self.contentView addSubview:_webView];
    }
    return _webView;
}
@end

替换为WKWebView后,经过测试发现,同样打开关闭网页界面重复十几次后,使用后者内存增长更小,内存减少20M以上

#import "QYAwardInfoDescribeCell.h"
#import "QYAwardInfoModel.h"

#import <WebKit/WKWebView.h>
#import <WebKit/WKNavigationDelegate.h>

@interface QYAwardInfoDescribeCell () <WKNavigationDelegate>

@property (weak, nonatomic) WKWebView *webView;
@end

@implementation QYAwardInfoDescribeCell


#pragma mark - lifecycle
- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        //
        self.webView.navigationDelegate = self;
        [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.mas_equalTo(self.contentView);
        }];
    }
    return self;
}

#pragma mark - setModel
- (void)setModel:(QYAwardInfoModel *)model {
    _model = model;

    NSString *str = model.descriptionField;
    if (str.length > 0) {
        [self.webView loadHTMLString:str baseURL:nil];
    }
    
}

#pragma mark webView代理
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
    // 获取内容高度
    [webView evaluateJavaScript:@"document.documentElement.scrollHeight" completionHandler:^(id _Nullable heightStr, NSError * _Nullable error) {
        CGFloat height = [heightStr floatValue];
        //
        if (height != self.model.particularsWebViewHeight) {
            self.webViewFinishLoadBlock ? self.webViewFinishLoadBlock(height) : nil;
        }
    }];
}

- (WKWebView *)webView {
    if (!_webView) {
        WKWebView *webView = [[WKWebView alloc] init];
        webView.scrollView.scrollEnabled = NO;
        //
        webView.backgroundColor = [UIColor whiteColor];
        webView.opaque = NO;
        //
        _webView = webView;
         [self.contentView addSubview:_webView];
    }
    return _webView;
}

@end

相关文章

  • cell中嵌套UIWebView和WKWebView

    最开始是Cell中嵌套UIWebView,但是当打开关闭不同网页重复很多次时,内存会不断增加,存在内存泄漏,后来改...

  • iOS获取webView内容高度不正确的问题

    不论是UIWebView还是WKWebView,在tableViewCell中嵌套使用时都有可能出现问题,比如通过...

  • 网页跳转相关

    一、Safari中打开网页 二、UIWebView 三、WKWebView WKWebView比UIWebView...

  • WKWebView和js交互

    UIWebView 和 WKWebView 的区别 WKWebView 更快(占用内存可能只有 UIWebView...

  • iOS加载GIF图

    1.WebView UIWebView WKWebView WKWebView实习和UIWebView一样,也是将...

  • WKWebView简单使用总结

    最近公司有做APP中嵌套 H5的业务;鉴于WKWebView的性能优于UIWebView,所以就选择了WKWebV...

  • 面试总结一

    1.对于cell而言,使用自动布局和高度缓存哪种方式比较好,为什么 2.UIWebView和WKWebView的区...

  • RSWebView(UIWebView和WKWebView的混合

    UIWebView和WKWebView的混合框架,UIWebView自动切换到WKWebView。只要直接把UIW...

  • 加载HTMLString

    之前用UIWebView做过混合开发,混合开发的总结以后再写吧!最近在cell中嵌套webview来加载html字...

  • UITableViewCell嵌套WKWebView

    今天看到有人问UITableView嵌套WKWebView的问题,恰好最近公司有这么一个需求,cell上嵌套网页并...

网友评论

      本文标题:cell中嵌套UIWebView和WKWebView

      本文链接:https://www.haomeiwen.com/subject/vydyfftx.html