IOS 使用WKWebView的loadHTMLString属性加载外部css,js样式对屏幕的适配

问题

    原生项目中加载html页面,使用WKWebview的loadHTMLString属性加载html外部样式,iOS中用UIWebView的loadHTMLString后图片和文字失调,图片过大,超过屏幕,文字太小。或者图片太小。文字太大,总之就是不协调。

我们的需求是让图片的大小跟着屏幕的变化而变化。就是动态的去适应屏幕。那么文字的字体就是我们自己能够控制,可大可小。要想达到这种效果。我们要在用loadHTMLString载入字符串之前对它进行处理。

开始爬坑:

1.遵循代理 WKNavigationDelegate    WKUIDelegate

2.- (void)viewDidLoad {

    [super viewDidLoad];

    self.wkWebView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];    

    self.wkWebView.navigationDelegate = self;

    self.wkWebView.scrollView.delegate = self;

    self.wkWebView.UIDelegate = self;        

    NSString *html_str = [NSString stringWithFormat:@"

iPhone新品上市!

iPhone新品上市!iPhone新品上市!


"];

    [self.wkWebView loadHTMLString:html_str baseURL:nil];

    [self.view addSubview:self.wkWebView];

}

//获取加载的html页面的高度代理方法

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

    [webViewevaluateJavaScript:@"document.body.scrollHeight" completionHandler:^(id result, NSError *_Nullable error) {

        //result 就是加载完成后 webView的实际高度

        //获取后返回重新布局

        NSLog(@"%@",result);

        self.wkWebView.frame = CGRectMake(0, 0, self.view.frame.size.width, [result integerValue]);

    }];

}

结果显示如下:


显示的内容偏左边显示,右侧有留白,并是不想要的全屏显示效果; 

第一种解决办法,(但没达到想要的效果,咨询前端的朋友说是内容设置了固定的宽,作为小白,没办法解决)

1.在初始化代码加入自适应内容

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];

WKUserContentController *content = [[WKUserContentController alloc]init];

// 自适应屏幕宽度js

NSString *jSString = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";

WKUserScript *wkUserScript = [[WKUserScript alloc] initWithSource:jSString injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];

// 添加自适应屏幕宽度js调用的方法

[contentaddUserScript:wkUserScript];

wkWebConfig.userContentController= content;

self.wkWebView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) configuration:wkWebConfig];

然后显示如下:


图片是放大了,但是放的太大了,内容超出了屏幕的宽度,需要左右滑动才能看完整的内容;

2.查了很多资料,发现一个解决办法

原理就是用一个for循环,拿到全部的图片,对每一个图片都处理一次,让图片的宽为100%,就是依照屏幕宽度自适应。让图片的高atuo,自己主动适应。文字的字体大小,能够去改font-size:15px,这里我用的是15px。依据自己的详细需求去改吧。


NSString*htmls = [NSString stringWithFormat:@" \n"

" \n"

" \n"

" \n"

""

"%@"

""

"",htmlString];

最终效果:


完美显示!

你可能感兴趣的:(IOS 使用WKWebView的loadHTMLString属性加载外部css,js样式对屏幕的适配)