美文网首页
iOS开发OC语言 接收后台传来的HTML语言,文本自适应宽高适

iOS开发OC语言 接收后台传来的HTML语言,文本自适应宽高适

作者: 小y想吃糖 | 来源:发表于2024-06-02 10:41 被阅读0次

需求:原生文本➕HTML➕原生,HTML部分不可点击放大。

实现:

//初始化的时候随便设置一个高度
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];

如何监测webview高度来设置后续原生视图呢?可以选择KVO的方式来设置,这样,可以随时监测webview的高度变化。

//记得是初始化webview之后再添加观察者,可以使用懒加载初始化webview,我这里没有使用懒加载。
[self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];

//实现方法
#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;                 
//这里去设置依赖webview的原生视图的frame
 } }

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

相关文章

网友评论

      本文标题:iOS开发OC语言 接收后台传来的HTML语言,文本自适应宽高适

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