iOS-UIWebView加载HTMLString图片显示超过屏

作者: 一位不愿透露姓名的王先生_ | 来源:发表于2016-11-06 11:44 被阅读2383次

简单介绍一下使用[self.webView loadHTMLString:htmls baseURL:nil]单纯加载HTMLString的小技巧。

  • 主要解决的是当加载的HTMLString既有文字又有图片时,图片没有缩放,导致图片宽度超过屏幕宽度,使得webView整体左右都可以滑动,这样效果非常不好(见下图):
01-图片过宽导致webView可以左右滑动.gif 01-图片过宽导致webView可以左右滑动.gif

效果不好的代码如下:

  • 注:以下方法是在网络请求成功回调里面调用的

    // 网络请求加载的数据,进行字典转模型
    NSDictionary *dict = [result objectForKey:@"data"];
    HQNewsDetailModel *model = [HQNewsDetailModel mj_objectWithKeyValues:dict];
    // model.details就是后台返回的HTMLString
    NSString *htmlString = [NSString stringWithString:model.details];
    // webView直接加载HTMLString
    [self.webView loadHTMLString:htmls baseURL:nil];

经过调整以后(见下图):

02-经过调整以后的效果.gif

调整后的代码如下:

  • 注:以下方法是在网络请求成功回调里面调用的

    // 网络请求加载的数据,进行字典转模型
    NSDictionary *dict = [result objectForKey:@"data"];
    HQNewsDetailModel *model = [HQNewsDetailModel mj_objectWithKeyValues:dict];

    /**

    • model.details就是后台返回的HTMLString
    • " $img[p].style.width = '100%%';\n"--->就是设置图片的宽度的
    • 100%代表正好为屏幕的宽度
      */
      NSString *htmlString = [NSString stringWithFormat:@"<html> \n"
      "<head> \n"
      "<style type="text/css"> \n"
      "body {font-size:15px;}\n"
      "</style> \n"
      "</head> \n"
      "<body>"
      "<script type='text/javascript'>"
      "window.onload = function(){\n"
      "var $img = document.getElementsByTagName('img');\n"
      "for(var p in $img){\n"
      " $img[p].style.width = '100%%';\n"
      "$img[p].style.height ='auto'\n"
      "}\n"
      "}"
      "</script>%@"
      "</body>"
      "</html>",model.details];

    // webView直接加载HTMLString
    [self.webView loadHTMLString:htmlString baseURL:nil];

03-关键代码描述.png

相关文章

网友评论

  • ca9dd0a1c1b2:可以,谢谢了
    一位不愿透露姓名的王先生_:@ca9dd0a1c1b2 客气了,一起学习:stuck_out_tongue:
  • 向钱冲啊:#pragma mark - UIWebViewDelegate
    - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
    [webView stringByEvaluatingJavaScriptFromString:
    @"var script = document.createElement('script');"
    "script.type = 'text/javascript';"
    "script.text = \"function ResizeImages() { "
    "var myimg,oldwidth,oldheight;"
    "var maxwidth = document.body.clientWidth-16;"// 图片宽度
    "for(i=0;i <document.images.length;i++){"
    "myimg = document.images[i];"
    "if(myimg.width > maxwidth){"
    "myimg.width = maxwidth;"
    "}"
    "}"
    "}\";"
    "document.getElementsByTagName('head')[0].appendChild(script);"];
    [webView stringByEvaluatingJavaScriptFromString:@"ResizeImages();"];
    }
    我这样在代理里面取出 js的屏幕宽度也可以的。document.body.clientWidth-16 默认宽度16 减去正好。
    向钱冲啊:@亦庄_吴彦祖 用WKwebview就可以设置。webview的话也一样要用js代码
    一位不愿透露姓名的王先生_:@向钱冲啊 :+1: 你会设置字体的大小吗?我在这里设置不起作用!

本文标题:iOS-UIWebView加载HTMLString图片显示超过屏

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