Cell 嵌套 WebView 高度及宽度计算解决办法(完美版)

此方法适用于CollectionView,tableView
解决了以下几个问题

  • 解决了由于WebView中图片过大或者过小而显示不全的问题
  • 解决了循环刷新CollectionView,tableView的问题
  • 解决了高度计算不准确的问题

转载请注明出处

无循环刷新问题,性能良好
性能良好
性能良好

NSString+js.h

//by:HQ
#import "NSString+js.h"

/**
 宽度计算

 @param width 屏幕宽度
 @return 宽度
 */
+ (instancetype)getJSWithScreentWidth:(CGFloat) width;


/**
 高度计算

 @param webView
 @return 高度
 */
+ (instancetype)getJSWithScreentHeightWithWebView:(UIWebView*)webView;
@end

NSString+js.m

//by:HQ
#import "NSString+js.h"

@implementation NSString (js)
//宽度计算
+ (instancetype)getJSWithScreentWidth:(CGFloat) width{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"webviewDeal.js" ofType:nil];
    NSString *js = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
    return [NSString stringWithFormat:@"%@ \n autoSizeFit(%@);",js,[NSString stringWithFormat:@"%.2f",width]];
}
//高度计算
+ (instancetype)getJSWithScreentHeightWithWebView:(UIWebView *)webView{
    CGFloat height =[[webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].scrollHeight"] floatValue];
    return [NSString stringWithFormat:@"%f",height];
}
@end

计算宽度核心代码

新建一个.js文件,把代码复制进去(例如:webviewDeal.js)


//  by HQ

var autoSizeFit = function(screenWidth){
    //1.设置所有字体
    var body = document.getElementsByTagName("body")[0];
    //设置body的宽度
    body.style.width = screenWidth;
    //设置body的字体
    var bodyStyleFontSize = body.style.fontSize;
    //设置整个body的宽度
    var bodyStyleWidth = body
    if(bodyStyleFontSize.length<=0){
        document.getElementsByTagName("body")[0].style.fontSize = 14;
    }
    
    //2获取table的宽度
    var tables = document.getElementsByTagName("table");
    for(var i=0;i<tables.length;i++){
        //2.1.设置所有表格的字体
        //判断是否有style属性的fontSize是否有值
        var table = tables[i];
        
        var tableStyleFontSize = table.style.fontSize;
        if(tableStyleFontSize.length<=0){//没有设置了table的fontSize
            table.style.fontSize = 14;
        }
        
        //2.2.设置表格的宽度
        var tableStyleWidth = table.style.width;
        table.style.width = screenWidth;
    }
    
    //3.设置图片
    var images = document.getElementsByTagName("img");
    for(var i=0;i<images.length;i++){
        var image = images[i];
        //设置图片的宽高比例
        
        var imgWidth = image.width;
        var imgHeight = image.height;
        var scale = imgHeight/imgWidth;
        
        //再通过比例来设置图片的宽高
        image.width = screenWidth;
        image.height = screenWidth*scale;
    }
    
    //4.设置所有div的宽度
    var divs = document.getElementsByTagName("div");
    for(var i=0;i<divs.length;i++){
        var div = divs[i];
        div.style.width = screenWidth;
    }
    
    //5.设置ul
    var uls = document.getElementsByTagName("ul");
    for(var i=0;i<uls.length;i++){
        var ul = uls[i];
        ul.style.width = screenWidth;
    }
}

如何使用?

//by:HQ
#pragma mark - UIWebViewDelegate
-(void)webViewDidFinishLoad:(UIWebView *)webView{
   //注入js,设置宽度
    NSString *jsStr = [NSString getJSWithScreentWidth:kSCREEN_WIDTH-35];
   [webView stringByEvaluatingJavaScriptFromString:jsStr];
   
  //获取高度
    CGFloat height = [NSString getJSWithScreentHeightWithWebView:webView].floatValue;
//获取模型的高度,判断模型中的高度是不是WebView的高度,如果不是则赋值给模型,赋值给模型后,高度相等,不在进入判断语句内,不再出现循环刷新问题
  ProductInfo * productInfo = self.concroteDetailsModel.productInfo;
    if (height!=productInfo.descriptionCellHigh) {
        productInfo.descriptionCellHigh  = height;
        [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:4]];
    }
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,536评论 4 61
  • 转载自:https://github.com/Tim9Liu9/TimLiu-iOS 目录 UI下拉刷新模糊效果A...
    袁俊亮技术博客阅读 14,120评论 9 105
  • 2017年四月十九日二十一点三十六分,我站在操场,看着自己的影子在宿舍楼顶的大探照灯下拉的纤细,我想,要是以后真...
    我憾昆仑阅读 3,641评论 3 4
  • 每个人都有属于自己的那一道光,是红是蓝是白是黑,都尽不相同,都有属于自己的独特颜色。 人生这条路,只能靠自己的双脚...
    子耳子耳阅读 1,760评论 0 0
  • 看不清的容颜 愈是模糊,愈是想念 沉默,早已习惯 寂寞的夜晚 点一支烟 是孤单 ,是想念 你温柔的双眸 触动了我的...
    LQ木子阅读 1,477评论 0 0

友情链接更多精彩内容