iOS開發(fā)OC語言 接收后臺傳來的HTML語言,文本自適應(yīng)寬高適配,網(wǎng)頁高度適配

需求:原生文本?HTML?原生,HTML部分不可點擊放大。

實現(xiàn):

//初始化的時候隨便設(shè)置一個高度
self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth - 30, 25)];
[self.webView loadHTMLString:@"后臺返回來的HTML字符串" baseURL:nil];
//加上JS語言:user-scalable=no禁止點擊放大等手勢;meta.name = 'viewport'; meta.content = 'width=device-width, initial-scale=1.0, maximum-scale=1.0 適配寬高
NSString *js = @"var meta = document.createElement('meta'); meta.name = 'viewport'; meta.content = 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no'; document.getElementsByTagName('head')[0].appendChild(meta);";
WKUserScript *script = [[WKUserScript alloc] initWithSource:js injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
?[self.webView.configuration.userContentController addUserScript:script];
?self.webView.navigationDelegate = self;
[self.scrollView addSubview:self.webView];

如何監(jiān)測webview高度來設(shè)置后續(xù)原生視圖呢?可以選擇KVO的方式來設(shè)置,這樣,可以隨時監(jiān)測webview的高度變化。

//記得是初始化webview之后再添加觀察者,可以使用懶加載初始化webview,我這里沒有使用懶加載。
[self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];

//實現(xiàn)方法
#pragma mark ------ < KVO > ------
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context { ? ?
if ([keyPath isEqualToString:@"contentSize"]) { ? ? ? ?
CGRect webFrame = self.webView.frame; ? ? ? ?
webFrame.size.height = self.webView.scrollView.contentSize.height; ? ? ? ?
self.webView.frame = webFrame; ?? ? ? ? ? ? ? ?
//這里去設(shè)置依賴webview的原生視圖的frame
?} }

//記得移除觀察者,一般在dealloc中移除
- (void)dealloc { ? ?
[self.webView.scrollView removeObserver:self forKeyPath:@"contentSize"];
?}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容