UIwebview 图片适应屏幕,控制图片宽度。

NSString * htmlString = @"<p><strong><span style=\"color:rgb(84, 141, 212)\">Honeywell恒温器</span></strong></p>\r\n\r\n<p style=\"text-align:center\"><strong><span style=\"color:rgb(84, 141, 212)\"><img src=\"http://img.ptcms.csdn.net/article/201503/23/550fbb9e6d841_middle.jpg\" style=\"border:none; vertical-align:middle\" /></span></strong></p>\r\n\r\n<p>2014年推出的Honeywell Lyric恒温器,2014年推出的Honeywell Lyric恒温器2014年推出的Honeywell  Lyric恒温器获得了HomeKit的支持,而且可以通过Apple Watch进行控制。显然,Apple Watch的用户可以在Glances看到他们家具系统的快照,加上由于Apple Watch地理围栏功能(geofencing,允许用户设置基于地理位置的提醒任务),当你离开家庭网络的范围时,将engage Out of Town mode。</p>\r\n\r\n<p>价格:249美元</p>\r\n";

使用

- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;

来解析htmlString

想让上面htmlString中包含的图片的宽度不超过屏幕的宽度。怎么破!! 网上复制js的代码不管用 (stackoverflow也没找到太有用的)。

附上网上的代码(无效的)

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
        [webView stringByEvaluatingJavaScriptFromString:
         @"var script = document.createElement('script');"
         "script.type = 'text/javascript';"
         "script.text = \"function ResizeImages() { "
         "var myimg,oldwidth;"
         "var maxwidth = 300.0;" // UIWebView中显示的图片宽度
         "for(i=0;i <document.images.length;i++){"
         "myimg = document.images[i];"
         "if(myimg.width > maxwidth){"
         "oldwidth = myimg.width;"
         "myimg.width = maxwidth;"
         "}"
         "}"
         "}\";"
         "document.getElementsByTagName('head')[0].appendChild(script);"];
        [webView stringByEvaluatingJavaScriptFromString:@"ResizeImages();"];
}

但是网上的设置字体的大小的JS代码有用

   NSString *str = @"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '120%'";
        [webView stringByEvaluatingJavaScriptFromString:str];

各位给点思路或者js码来试试~~

阅读 11.1k
2 个回答

这里面需要再次加载。才可以控制图片。
解决方案可以是第一次加载时候隐藏webview,
在didFinishLoad中再次调用

  • (void)loadHTMLString:(NSString )string baseURL:(NSURL )baseURL;
    第二次进入didFinishLoad就可以不隐藏webview。

避免循环调用,在方法didFinishLoad中做简单地加载次数控制。

为什么这样,原因不知道,谁知道就告诉一声。
评论此问题或者补充回答。
3q。

/------2016-03-30----/

 NSString *htmls = [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>",htmlString];

除了标哥的方法最近又找到一种方法。将原始的htmlString包装一下,然后再load。
已经测试过,效果不错。
原文链接: http://blog.csdn.net/wenmingzheng/articl...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏