wkwebview 字体大小调整 网页内容高度计算

来源:互联网 发布:网络签约写手的收入 编辑:程序博客网 时间:2024/05/16 17:08

现有一个需求,,将一个网页作为tableview的头视图,,tableview列表展示评论内容,,这就要求计算出webview的高度。。此外,,有一个字体调整大小的按钮,,选择不同大小的字体,,头视图高度要变化。。


遇到的问题,,字体有小到大,,网页高度计算没有问题,,但字体由大到小,,网页高度不变。。所以出现一大块空白。。


以下总结处理方法。。思路是字体有小到大,,不做处理,,字体由大到小,,就当前网页移除,,重新添加并设置字体大小。。

- (void)viewDidLoad {

    [superviewDidLoad];

    self.webfont =1;/// 1:小号字体,2:中号字体,3:大号字体

   [selfcreateView];


}


- (void)createView{

    self.newsTableView = [[UITableViewalloc] initWithFrame:CGRectMake(0,64, WIDTH, HEIGHT-64-49)style:UITableViewStylePlain];

    [self.viewaddSubview:self.newsTableView];

    self.newsTableView.backgroundColor = [UIColorclearColor];

    self.newsTableView.delegate = self;

    self.newsTableView.dataSource = self;

    [selfcreateWebView];

}

- (void)createWebView{

    self.newsWebView = [[WKWebViewalloc] init];

    self.newsWebView.frame =CGRectMake(0,0, WIDTH,HEIGHT);

    self.newsWebView.navigationDelegate = self;

    self.newsWebView.scrollView.scrollEnabled = NO;

    self.newsWebView.scrollView.backgroundColor = [UIColorclearColor];

    self.newsWebView.backgroundColor = [UIColorclearColor];

    [self.newsWebViewsetOpaque:NO];

     /// 添加计算网页高度的监听

    [self.newsWebViewaddObserver:selfforKeyPath:@"scrollView.contentSize"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:@"DJWebKitContext"];

    self.newsTableView.tableHeaderView = self.newsWebView;

}

- (void)reloadWebview:(NSString *)html{

    [self.newsWebViewloadHTMLString:html baseURL:nil];

}

#pragma mark 网页开始加载

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


}

#pragma mark 网页加载完成

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

     /// 网页加载完成后,,设置字体大小

    if (self.webfont ==1) {

        [self.newsWebViewevaluateJavaScript:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '100%'"completionHandler:nil];

    }elseif (self.webfont ==2){

        [self.newsWebViewevaluateJavaScript:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '120%'"completionHandler:nil];

    }else{

        [self.newsWebViewevaluateJavaScript:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '140%'"completionHandler:nil];

    }

}

#pragma mark 监听网页的内容高度

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

    if (!self.newsWebView.isLoading) {

        if([keyPathisEqualToString:@"scrollView.contentSize"]){

            self.newsWebView.frame = CGRectMake(0,0, WIDTH,self.newsWebView.scrollView.contentSize.height);

            self.newsTableView.tableHeaderView = self.newsWebView;

        }

    }

}

  //// 选择字体大小的按钮的点击方法

- (void)addbuttonAction{

    UIAlertController * alertVC = [UIAlertControlleralertControllerWithTitle:@"设置字体大小"message:nilpreferredStyle:UIAlertControllerStyleActionSheet];

    UIAlertAction * cancelAction = [UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancelhandler:nil];

    UIAlertAction * bigAction = [UIAlertActionactionWithTitle:@""style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *action) {

        /// 字体从小号,,中号 到大号

        [self.newsWebViewevaluateJavaScript:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '140%'"completionHandler:nil];

        self.webfont =3;

    }];

    UIAlertAction * middleAction = [UIAlertActionactionWithTitle:@""style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *action) {

        if (self.webfont ==1) {

            /// 字体从小号到中号

           [self.newsWebViewevaluateJavaScript:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '120%'"completionHandler:nil];

        }elseif (self.webfont ==3){

             //// 字体从大号到中号

            [selfwebDeallocandRecreate];

        }

        self.webfont =2;

    }];

    UIAlertAction * smallAction = [UIAlertActionactionWithTitle:@""style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *action) {

        if (self.webfont ==2) {

            /// 字体从中号到小号

            [selfwebDeallocandRecreate];

        }elseif (self.webfont ==3){

             /// 字体从大号到小号

            [selfwebDeallocandRecreate];

        }

        self.webfont =1;

    }];

    [alertVC addAction:cancelAction];

    [alertVC addAction:bigAction];

    [alertVC addAction:middleAction];

    [alertVC addAction:smallAction];

    [selfpresentViewController:alertVCanimated:YEScompletion:nil];

}


- (void)webDeallocandRecreate{

    /// 移除网页高度计算的监听

    [self.newsWebViewremoveObserver:selfforKeyPath:@"scrollView.contentSize"context:@"DJWebKitContext"];

    self.newsWebView.navigationDelegate = nil;

    self.newsTableView.tableHeaderView = nil;

    self.newsWebView =nil;

    [self.newsWebViewremoveFromSuperview];

    [selfcreateWebView];

    [selfreloadWebview:self.webHtml];

}





原创粉丝点击